由于官僚主义,我需要在我的存储库中获取所有已更改文件的列表以获取报告(我从现有源代码开始)。
我该怎么办才能得到这个清单?
对于在给定SHA和当前提交之间更改的文件:
git diff --name-only <starting SHA> HEAD
或者如果您想要包含已更改但尚未提交的文件:
git diff --name-only <starting SHA>
更一般地,以下语法将始终告诉您哪些文件在两次提交之间更改(由其SHA或其他名称指定):
git diff --name-only <commit1> <commit2>
要查找自上次提交以来修改的所有文件的名称:
git diff --name-only
或者(更多信息,包括未跟踪的文件):
git status
git diff --name-only
git diff --name-only --staged
{ git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
git status
列出的文件,因此不包括任何被忽略的文件):
git ls-files --other --exclude-standard
如果您在shell脚本中使用它,并且想要以编程方式检查这些命令是否返回任何内容,那么您将对git diff
的--exit-code
选项感兴趣。
当我添加/修改/删除了许多文件(自上次提交以来),我喜欢按时间顺序查看这些修改。
为此,我使用:
git ls-files --other --modified --exclude-standard
while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done
sort
别名使其更易于使用:
alias gstlast='git ls-files --other --modified --exclude-standard|while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done|sort'
例如:
username@hostname:~> gstlast
2015-01-20 11:40:05.000000000 +0000 .cpl/params/libelf
2015-01-21 09:02:58.435823000 +0000 .cpl/params/glib
2015-01-21 09:07:32.744336000 +0000 .cpl/params/libsecret
2015-01-21 09:10:01.294778000 +0000 .cpl/_deps
2015-01-21 09:17:42.846372000 +0000 .cpl/params/npth
2015-01-21 12:12:19.002718000 +0000 sbin/git-rcd
我现在可以查看我的修改,从最旧到最近。
我需要一个在两次提交之间更改内容的文件列表(仅添加或修改),因此我使用了:
git diff --name-only --diff-filter=AM <commit hash #1> <commit hash #2>
来自git diff documentation的不同diff-filter选项:
diff-filter = [(A | C | D | M | R | T | U | X | B)... [*]]
仅选择已添加(A),复制(C),删除(D),修改(M),重命名(R)的文件,其类型(即常规文件,符号链接,子模块,...)已更改(T),未合并(U),未知(X),或已配对破碎(B)。可以使用过滤器字符的任何组合(包括无)。当*(全部或全部)添加到组合中时,如果有任何文件与比较中的其他条件匹配,则选择所有路径;如果没有与其他条件匹配的文件,则不会选择任何内容。
此外,这些大写字母可以降级为排除。例如。 --diff-filter = ad排除添加和删除的路径。
如果您想列出状态(例如A / M),请将--name-only
更改为--name-status
。
可以使用git status
和grep
命令获得未分级修改的列表,如下所示。像git status -s | grep M
:
root@user-ubuntu:~/project-repo-directory# git status -s | grep '^ M'
M src/.../file1.js
M src/.../file2.js
M src/.../file3.js
....
使用git show
,你可以得到类似的结果。为了查看提交(就像它在git log
视图上看到的那样),包含的文件列表,使用:
git show --name-only [commit-id_A]^..[commit-id_B]
其中[commit-id_A]
是初始提交,[commit-id_B]
是最后一次提交,而不是你想要显示的。
特别注意与^
符号。如果不这样做,则不会部署commit-id_A信息。
如果你想检查更改的文件,你需要处理许多最好使用的小东西,比如你想要检查哪些文件只是更改了
git status - 它将显示包含更改的文件
那么如果您想知道要做出哪些更改,可以通过以下方式进行检查:
git diff - 将显示所有文件中的所有更改
只有在修改一个文件时才有用
如果要查看特定文件,请使用
git diff