Answers:
对于在给定的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 <SHA> <SHA>^
--name-status标记代替--name-only可以方便地获取文件列表并查看其修改状态,例如“已添加”或“已修改”。
--name-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
xargs -0 stat -c '%y %n' --
要将其从最早到最新排序:
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'
或者(更短,效率更高,这要感谢ruvim)
alias gstlast='git ls-files --other --modified --exclude-standard|xargs -0 stat -c '%y %n' --|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
现在,我可以查看从最早到最近的修改。
xargs和单次调用stat?完整的git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
我需要在两次提交之间更改了内容的文件列表(只能添加或修改),所以我使用了:
git diff --name-only --diff-filter=AM <commit hash #1> <commit hash #2>
git diff文档中不同的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
....