git使用ls-files查看暂存区中的内容
git ls-files默认是显示暂存区中全部文件的路径,你可以加选项来筛选文件(这命令能看远程仓库文件吗?)
原文:https://blog.csdn.net/the_v_/article/details/48786365
参考:https://blog.csdn.net/weixin_38289699/article/details/78203650
$ git ls-tree -l HEAD
查看HEAD(版本库中当前提交)指向的目录树
-l参数可以显示文件大小
输出的文件条目从左至右,第一个字段是文件的属性,第二个字段(blob)说明是Git对象库中的一个blob对象(文件),第三个字段是该文件在对象库中对应的ID——一个40位的SHA1哈希值格式的ID,第四个字段是文件大小,第五个字段是文件名。
在浏览暂存区的目录树之前,首先清除工作区当前的改动。
$ git clean -fd清除当前工作区中没有加入版本库的文件和目录(非跟踪文件和目录),然后执行$ git checkout .命令,用暂存区内容刷新工作区。
$ git ls-files -s
显示暂存区的目录树,其中第三个字段不是文件大小而是暂存区编号
若想针对暂存区的目录树使用git ls-tree命令,需要先将暂存区的目录树写入Git对象库,然后针对该目录树执行git ls-tree命令
$ git write-tree
输出的就是写入Git对象库的TreeID,这个ID将作为下一条命令的输入5b873f747ccb268e4491f289eb37fc675ff5825b
$ git ls-tree -l 5b873f747
只需写前几位,只要不与其他对象的ID冲突即可
100644 blob 3b18e512dba79e4c8300dd08aeb37f8e728b8dad 12test
可以看出到处都是40位的SHA1哈希值格式的ID,可以用于指代文件内容(blob)、目录树(tree)和提交。
$ git write-tree | xargs git ls-tree -l -r -t递归显示目录内容使用-r参数,显示递归过程中遇到的每棵树而不是只显示最终文件使用-t参数
不要使用git commit -a带上此参数,对本地所有变更的文件执行提交操作,包括对本地修改的文件和删除的文件,但不包括未被版本库跟踪的文件。可以简化一些操作,减少用git add命令标识变更文件的步骤,但是丢掉了对提交内容进行控制的能力。
$ git stash 运行完此命令后再查看工作区状态,会发现工作区尚未提交的改动(包括暂存区的改动)全都不见了
其实,感觉提交代码的更改一共分2个阶段。
1).从工作目录,提交到stage。
2).从stage提交到master。
从工作目录提交到stage,需要用add或者rm命令,只提交到stage,而没有提交到master,是不会自动同步到master的。
从stage提交到master用commit命令。
退回也是要分两步,一个是从master退回到stage,然后再从stage退回到工作目录。
对于还没有提交到stage的,可以从stage用checkout命令退回,这一步会取stage中的文件状态,覆盖掉工作目录中文件的状态,跟master完全没关系。
对于已经到达stage的,想把state中的文件状态用master中的覆盖掉,就用reset命令,这样就把stage中修改用master的状态覆盖掉了,完全跟工作目录没关系
git checkout -- file
实例:命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,撤销修改就回到添加到暂存区后的状态。需要注意的是 git checkout – file命令中的–,没有–,就变成了“切换到另一个分支”的命令
git reset HEAD file
实例:命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
git ls-files [-z] [-t] [-v]
(--[cached|deleted|others|ignored|stage|unmerged|killed|modified])*
(-[c|d|o|i|s|u|k|m])*
[-x <pattern>|--exclude=<pattern>]
[-X <file>|--exclude-from=<file>]
[--exclude-per-directory=<file>]
[--exclude-standard]
[--error-unmatch] [--with-tree=<tree-ish>]
[--full-name] [--abbrev] [--] [<file>...]
选项 |
含义 |
-c, --cached |
显示缓存了的文件(默认) |
-d, --deleted |
显示删除了的文件 |
-m, --modified |
显示修改了的文件 |
-o, --others |
显示其他类型的文件(比如未追踪的) |
-i, --ignored |
显示忽略了的文件(满足忽略模式的) |
-s, --stage |
显示暂存的条目的相关信息(模式位,文件哈希后的值,暂存号和文件名), [<tag> ]<mode> <object> <stage> <file> 比如: |
选项
-c --cached
在输出中显示缓存的文件(默认)
-d --deleted
在输出中显示已删除的文件
-m --modified
在输出中显示已修改的文件
-o --others
在输出中显示其他(即未跟踪的)文件
-i --ignored
在输出中只显示被忽略的文件。在索引中显示文件时,只打印排除模式匹配的文件。显示“其他”文件时,只显示通过排除模式匹配的文件。
-s --stage
在输出中显示暂存内容的模式位,对象名称和阶段编号。
--directory
如果整个目录被分类为“其他”,则只显示其名称(带有斜线)而不是其全部内容。
--no-empty-directory
不要列出空目录。没有 - 目录无效。
-u --unmerged
在输出中显示未合并的文件(forces --stage)
-k --killed
在文件系统上显示由于文件/目录冲突而需要删除的文件以使checkout-index成功。
-z
\ 0行输出终止,不要引用文件名。有关更多信息,请参阅下面的OUTPUT。
-x <pattern> --exclude=<pattern>
跳过未匹配的文件匹配模式。请注意,模式是一个外壳通配符模式。有关更多信息,请参阅下面的EXCLUDE PATTERNS。
-X <file> --exclude-from=<file>
从<file>读取排除模式; 每行1个。
--exclude-per-directory=<file>
读取仅适用于<file>中的目录及其子目录的其他排除模式。
--exclude-standard
在每个目录中添加标准Git排除项:.git / info / exclude,.gitignore和用户的全局排除文件。
--error-unmatch
如果任何<file>没有出现在索引中,则将其视为错误(返回1)。
--with-tree=<tree-ish>
当使用--error-unmatch将用户提供的<file>(即路径模式)参数展开为路径时,假定自从指定的<tree-ish>后索引中删除的路径仍存在。使用此选项-s
或-u
选项没有任何意义。
-t
此功能已半弃用。对于编写脚本的目的,git-status [1] --porcelain
和git-diff-files [1] --name-status
几乎总是优越的选择,用户应该查看git-status [1] --short
或git-diff [1] --name-status
以获得更多用户友好的选择。
此选项在每行开始时用以下标记(后跟一个空格)标识文件状态:
H
缓存
S
skip-worktree
M
未合并
R
removed/deleted
C
modified/changed
K
to be killed
?
other
-v
与-t
标记为assume unchanged
(请参阅git-update-index [1])的文件类似,但使用小写字母。
--full-name
从子目录运行时,该命令通常会输出相对于当前目录的路径。该选项强制相对于项目顶部目录输出路径。
--recurse-submodules
在存储库中的每个子模块上递归调用ls-files。目前只支持 - 高速缓存模式。
--abbrev=<n>
不显示完整的40字节十六进制对象行,只显示部分前缀。非默认位数可以用--abbrev = <n>来指定。
--debug
在描述文件的每一行之后,添加更多关于其缓存条目的数据。这旨在显示尽可能多的手动检查信息; 确切的格式可能会随时更改。
--eol
显示文件的<eolinfo>和<eolattr>。<eolinfo>是当“text”属性为“auto”(或未设置且core.autocrlf不为false)时由Git使用的文件内容标识。<eolinfo>是“文本”,“无”,“lf”,“crlf”,“混合”或“”。
“”表示该文件不是常规文件,它不在索引中或在工作树中无法访问。
它是“”,“ - text”,“text”,“text = auto”,“text eol = lf”,“text eol = crlf”时检查或提交时使用的属性。由于支持Git 2.10“text = auto eol = lf”和“text = auto eol = crlf”。
索引(“i / <eolinfo>”)和工作树(“w / <eolinfo>”)中的<eolinfo>均显示为常规文件,后面跟着(“attr / <eolattr>”)。
不要将更多的参数解释为选项。
<file>
要显示的文件。如果没有给出文件,则显示与其他指定标准相匹配的所有文件。
输出
git ls-files
只是输出文件名,除非--stage
在这种情况下输出:
[<tag> ]<mode> <object> <stage> <file>
git ls-files --eol
将显示i / <eolinfo> <SPACES> w / <eolinfo> <SPACES> attr / <eolattr> <SPACE *> <TAB> <file>
git ls-files --unmerged
和git ls-files --stage
可用于检查对未合并的路径的详细信息。
对于未合并的路径,索引不是记录单个模式/ SHA-1对,而是记录多达三个这样的对; 一个来自阶段1中的树O,阶段2中的A以及阶段3中的B.这个信息可以由用户(或瓷器)用来查看最终应该在路径上记录什么。(有关状态的更多信息,请参阅git-read-tree [1])
如果没有这个-z
选项,带有“不寻常”字符的路径名将按照配置变量的说明引用core.quotePath
(请参阅git-config [1])。使用-z
文件名是逐字输出的,并且该行由NUL字节终止。
排除模式
git ls-files
可以在遍历目录树时使用“排除模式”列表,并查找指定何时指定标志 - 其他或--ignign的文件。gitignore [5]指定排除模式的格式。
这些排除模式来自这些地方,以便:
-
命令行标志--exclude = <pattern>指定一个模式。模式按照它们在命令行中出现的顺序排列。
-
命令行标志--exclude-from = <file>指定一个包含模式列表的文件。模式按照它们在文件中出现的顺序排列。
-
命令行标志--exclude-per-directory = <name>
git ls-files
通常指定每个目录中文件的名称.gitignore
。较深目录中的文件优先。模式按照它们在文件中出现的顺序排列。
使用--exclude-from指定的文件中排除或读取的模式在命令行上指定的模式相对于目录树的顶部。从--exclude-per-directory指定的文件中读取的模式相对于模式文件出现的目录。
更多可见:Git中文开发手册
还有就是想问一下有没有什么命令可以查看远程仓库的所有文件目录?