Amb*_*ber 221
对于在给定SHA和当前提交之间更改的文件:
git diff --name-only <starting SHA> HEAD
Run Code Online (Sandbox Code Playgroud)
或者如果您想要包含已更改但尚未提交的文件:
git diff --name-only <starting SHA>
Run Code Online (Sandbox Code Playgroud)
更一般地,以下语法将始终告诉您哪些文件在两次提交之间更改(由其SHA或其他名称指定):
git diff --name-only <commit1> <commit2>
Run Code Online (Sandbox Code Playgroud)
Tim*_*lis 61
要查找自上次提交以来修改的所有文件的名称:
git diff --name-only
Run Code Online (Sandbox Code Playgroud)
或者(更多信息,包括未跟踪的文件):
git status
Run Code Online (Sandbox Code Playgroud)
Fli*_*imm 48
列出所有未暂存的已跟踪已更改文件:
git diff --name-only
Run Code Online (Sandbox Code Playgroud)列出所有已暂存的已更改文件:
git diff --name-only --staged
Run Code Online (Sandbox Code Playgroud)列出所有已暂存和未暂存的已跟踪已更改文件:
{ git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
Run Code Online (Sandbox Code Playgroud)列出所有未跟踪的文件(列出的文件git status,因此不包括任何被忽略的文件):
git ls-files --other --exclude-standard
Run Code Online (Sandbox Code Playgroud)如果你想利用这个在shell脚本,以及要以编程方式检查,如果这些命令返回的话,你会感兴趣git diff的--exit-code选项.
Von*_*onC 14
当我添加/修改/删除了许多文件(自上次提交以来),我喜欢按时间顺序查看这些修改.
为此,我使用:
列出所有非暂存文件:
git ls-files --other --modified --exclude-standard
Run Code Online (Sandbox Code Playgroud)要获取每个文件的上次修改日期:
while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done
Run Code Online (Sandbox Code Playgroud)要将它们从最旧到最近排序:
xargs -0 stat -c '%y %n' --
Run Code Online (Sandbox Code Playgroud)别名使其更易于使用:
sort
Run Code Online (Sandbox Code Playgroud)
例如:
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'
Run Code Online (Sandbox Code Playgroud)
我现在可以查看我的修改,从最旧到最近.
我需要在两次提交之间更改内容的文件列表(仅添加A、 或修改M),所以我使用了:
git diff --name-only --diff-filter=AM <from_commit_hash> <to_commit_hash>
Run Code Online (Sandbox Code Playgroud)
以下是git diff 文档中的不同--diff-filter选项(另请参阅):man git diff
--diff-filter=[(A|C|D|M|R|T|U|X|B)…?[*]]仅选择已添加 (
A)、已复制 (C)、已删除( )、已D修改 (M)、已重命名 (R)、其类型(即常规文件、符号链接、子模块……?)已更改 (T)、未合并 (U) 的文件未知 (X),或配对已损坏 (B)。可以使用过滤器字符的任意组合(包括无)。当*(All-or-none)被添加到组合中时,如果有任何文件符合比较中的其他条件,则选择所有路径;如果没有符合其他条件的文件,则不选择任何内容。此外,可以将这些大写字母小写以排除。例如,
--diff-filter=ad排除添加和删除的路径。请注意,并非所有差异都具有所有类型。例如,从索引到工作树的差异永远不会有添加的条目(因为差异中包含的路径集受到索引中的内容的限制)。同样,如果禁用了对这些类型的检测,则不会出现复制和重命名的条目。
如果您还想列出状态(例如A/ M),请更改--name-only为--name-status:
git diff --name-status --diff-filter=AM <from_commit_hash> <to_commit_hash>
Run Code Online (Sandbox Code Playgroud)