2362

我在存储库中有一堆提交。我想查看两次提交之间更改的文件列表 - 从SHA1SHA2

我应该使用什么命令?

4

15 回答 15

3190
git diff --name-only SHA1 SHA2

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

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

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

于 2009-10-12T01:51:34.630 回答
511
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 复制编辑 文件已被复制和修改
R 重命名编辑 文件已被重命名和修改
A 添加 文件已添加
D 已删除 文件已被删除
U 未合并 合并后文件有冲突
于 2011-07-26T09:26:18.233 回答
127

似乎没有人提到开关--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(-)
于 2017-10-19T21:50:40.057 回答
64

但是要查看您的分支与其共同祖先与另一个分支(例如 origin/master)之间的文件更改:

git diff --name-only `git merge-base origin/master HEAD`
于 2012-03-20T17:10:23.303 回答
29

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

git diff --name-status mybranch..myotherbranch

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

添加一个grep可以进一步完善事物:

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

这将只显示添加到myotherbranch.

于 2013-10-22T10:42:22.220 回答
11

另请注意,如果您只想查看上次提交和之前的提交之间的更改文件,则可以正常工作:

git show --name-only
于 2015-10-01T20:42:14.800 回答
10

将以下别名添加到您的~/.bash_profile文件中,然后运行source ~/.bash_profile;现在,无论何时您需要showfiles从您的 git 存储库中查看上次提交、运行中的更新文件。

alias showfiles='git show --pretty="format:" --name-only'
于 2015-04-10T19:38:17.933 回答
8

这将显示文件中的更改:

git diff --word-diff SHA1 SHA2
于 2014-12-04T15:10:40.127 回答
6

每个先前答案的最大问题是,如果您想使用您试图从存储库中取出的信息,您会被输入一个寻呼机,这非常烦人。特别是如果您是一名开发人员,他们宁愿学习您应该开发的应用程序的业务逻辑,而不是学习 vim 命令。

使用 --no-pager 解决了这个问题。

git --no-pager  diff --name-only sha1 sha2
于 2021-07-04T21:36:49.597 回答
4

采用

git log --pretty=oneline > C:\filename.log

这将只记录一个单行(--pretty=oneline),它是更改文件的名称。它还将所有详细信息记录到您的输出文件中。

于 2014-09-10T10:59:35.800 回答
4

以下对我很有效:

git show --name-only --format=tformat: SHA1..SHA2

它也可以与单个提交一起使用:

git show --name-only --format=tformat: SHA1

这对于在Jenkins中使用非常方便,您可以在其中提供变更集 SHA 哈希值列表,并希望遍历它们以查看哪些文件已更改。

这类似于之前的几个答案,但使用tformat:而不是format:删除提交之间的分隔符空间。

于 2018-11-16T19:27:47.967 回答
4

对于只需要关注 Java 文件的人来说,这是我的解决方案:

 git diff --name-status SHA1 SHA2 | grep '\.java$'
于 2019-01-29T03:48:16.183 回答
2

基于git diff --name-status我编写的git-diffview Git 扩展,它呈现了两个路径之间变化的分层树视图。

于 2015-11-03T09:39:46.843 回答
2

正如 artfulrobot 在他的回答中所说:

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

我的例子:

git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997 
4b95d595812211553070046bf2ebd807c0862cca
M       views/layouts/default.ctp
M       webroot/css/theme.css
A       webroot/img/theme/logo.png
于 2018-05-03T12:37:07.990 回答
2

如果有人正在查找已更改文件的列表,包括暂存文件

git diff HEAD --name-only --relative --diff-filter=AMCR

git diff HEAD --name-only --relative --diff-filter=AMCR sha-1 sha-2

--relative如果您想要绝对路径,请删除。

于 2021-01-21T02:00:53.633 回答