如何获取两个Git提交之间更改的所有文件的列表?

Che*_*rot 162 git

由于官僚主义,我需要在我的存储库中获取所有已更改文件的列表以获取报告(我从现有源代码开始).

我该怎么办才能得到这个清单?

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)

  • 使用`--name-status`标志而不是`--name-only`可以方便地获取文件列表并查看其修改状态,例如添加或修改. (3认同)
  • 如果你想知道为特定提交修改的文件,请执行:`git diff --name-only <SHA> <SHA> ^` (2认同)

Tim*_*lis 61

要查找自上次提交以来修改的所有文件的名称:

git diff --name-only
Run Code Online (Sandbox Code Playgroud)

或者(更多信息,包括未跟踪的文件):

git status
Run Code Online (Sandbox Code Playgroud)


Fli*_*imm 48

如果你想利用这个在shell脚本,以及要以编程方式检查,如果这些命令返回的话,你会感兴趣git diff--exit-code选项.


Von*_*onC 14

当我添加/修改/删除了许多文件(自上次提交以来),我喜欢按时间顺序查看这些修改.

为此,我使用:

别名使其更易于使用:

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)

我现在可以查看我的修改,从最旧到最近.


Fod*_*der 6

我需要在两次提交之间更改内容的文件列表(仅添加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)