题 如何仅列出两次提交之间更改的文件名?


我在回购中有一堆提交。我想看到两个提交之间更改的文件列表 - 从SHA1到SHA2。

我应该使用什么命令?


1478
2017-10-12 01:48


起源


对于提交及其父级: stackoverflow.com/questions/424071/... - Ciro Santilli 新疆改造中心 六四事件 法轮功


答案:


git diff --name-only SHA1 SHA2

您只需要包含足够的SHA来识别提交。例如,您也可以这样做

git diff --name-only HEAD~10 HEAD~5

查看第十个最新提交和第五个最新提交(或左右)之间的差异。


2011
2017-10-12 01:51



这也适用于git show。 git show --name-only SHA1。 - August Lilleaas
获取GIT + CVS工作流的提交列表特别有用 - shiva
git diff --name-status [TAG|SHA1] 显示了对文件执行的操作 - reconbot
你也可以这样做:git diff --name-only HEAD @ {3} HEAD @ {0},用于你想要比较的确切提交。 - b01
@AugustLilleaas实际上使用show只会显示2个特定的提交,如果你在这两个提交之间提交它们将被遗漏 - chrisan


git diff --name-status [SHA1 [SHA2]]

就像--name-only,除了你得到一个简单的前缀,告诉你文件发生了什么(修改,删除,添加......)

git log --name-status --oneline [SHA1..SHA2]

类似,但提交消息后列出了提交,因此您可以看到文件何时更改。

  • 如果您对某些文件/文件夹发生的事情感兴趣,可以追加 -- <filename> [<filename>...] 到了 git log 版。

  • 如果你想看看单个提交发生了什么,称之为SHA1,然后做
    git log --name-status --oneline [SHA1^..SHA1]

文件状态标志:
M修改 - 文件已被修改
C copy-edit - 已复制和修改文件
R rename-edit - 文件已重命名和修改
添加了 - 文件已添加
D已删除 - 文件已被删除
U unmerged - 合并后文件存在冲突


342
2017-07-26 09:26



我碰巧说git diff --name-status,它确实给了'添加文件'。 - aartist
对于git log,它需要在SHA之间有两个点,比如SHA1..SHA2,第二个SHA不是可选的,所以它应该是这样的:git log --name-status --oneline [SHA1 .. SHA2] - twasbrillig
有没有办法排除某些文件/某些文件类型? - aug
该 --relative[=<path>] 我不确定选项可能对你有所帮助。否则就会有 | erep -v '(.tmp|.foo|.dontwant)$' ... - artfulrobot


但是为了看到你的分支和它的共同祖先与另一个分支(比如origin / master)之间的文件发生了变化:

git diff --name-only `git merge-base origin/master HEAD`

42
2018-03-20 17:10



这真的很有用!我希望我能简单地说 git diffstatus master或类似的,触发上述。 - oma
要么 git show --pretty=format: --name-only origin/master..。 - sschuberth
您可能无法将其设为git别名,但您绝对可以将其放入.bashrc中。 - Fred
甚至更简单: git diff --name-only HEAD...master (注意三个点)。有关详细说明,请参阅 这里。 - ostrokach
看起来大多是正确答案!简单 git diff --name-only master..branch 与github PR列表不对应。这种方式更精确。但无论如何,我在github PR中有173个链接文件和171个。 (不 merge-base 我有228对171) - x'ES


似乎没有人提到过这个开关 --stat

$ git diff --stat HEAD~5 HEAD
 .../java/org/apache/calcite/rex/RexSimplify.java   | 50 +++++++++++++++++-----
 .../apache/calcite/sql/fun/SqlTrimFunction.java    |  2 +-
 .../apache/calcite/sql2rel/SqlToRelConverter.java  | 16 +++++++
 .../org/apache/calcite/util/SaffronProperties.java | 19 ++++----
 .../org/apache/calcite/test/RexProgramTest.java    | 24 +++++++++++
 .../apache/calcite/test/SqlToRelConverterTest.java |  8 ++++
 .../apache/calcite/test/SqlToRelConverterTest.xml  | 15 +++++++
 pom.xml                                            |  2 +-
 .../apache/calcite/adapter/spark/SparkRules.java   |  7 +--
 9 files changed, 117 insertions(+), 26 deletions(-)

还有 --numstat

$ git diff --numstat HEAD~5 HEAD
40      10      core/src/main/java/org/apache/calcite/rex/RexSimplify.java
1       1       core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
16      0       core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
8       11      core/src/main/java/org/apache/calcite/util/SaffronProperties.java
24      0       core/src/test/java/org/apache/calcite/test/RexProgramTest.java
8       0       core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
15      0       core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
1       1       pom.xml
4       3       spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java

--shortstat

$ git diff --shortstat HEAD~5 HEAD
9 files changed, 117 insertions(+), 26 deletions(-)

27
2017-10-19 21:50



接受的答案是正确的,但这是非常有用的,并为您提供一些额外的信息。谢谢! - kontur
同意这是一个更有用的答案,因为它包含差异统计。 - internetross


要补充@ artfulrobot的答案,如果要在两个分支之间显示已更改的文件:

git diff --name-status mybranch..myotherbranch

注意优先顺序。如果您先放置较新的分支,那么它会将文件显示为已删除而不是添加。

添加一个 grep 可以进一步改进:

git diff --name-status mybranch..myotherbranch | grep "A\t"

然后,这将只显示添加的文件 myotherbranch


17
2017-10-22 10:42



Regexes很好,几乎可以做任何事情。在这种情况下,也有 --diff-filter 它本身提供此功能,这意味着不正确结果的可能性较小(例如误报) - Jasper


在下面添加别名 ~/.bash_profile然后跑, source ~/.bash_profile;现在,只要你需要在上次提交中看到更新的文件,运行, showfiles 来自你的git存储库。

alias showfiles='git show --pretty="format:" --name-only'

8
2018-04-10 19:38



要么 git config --global alias.showfiles 'show --pretty="format:" --name-only' 制作 git showfiles。 - cgmb


这将显示文件中的更改:

git diff --word-diff SHA1 SHA2

7
2017-12-04 15:10