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

我应该使用什么命令?


git diff --name-only SHA1 SHA2

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

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

查看第十次最新提交和第五次最新(或大约)提交之间的差异。


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

类似于--name,只是你得到一个简单的前缀,告诉你文件发生了什么(修改、删除、添加…)

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

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

如果您对某些文件/文件夹发生的情况感兴趣,可以在git日志版本中添加--<filename>[<filename>…]。如果您想查看一次提交发生了什么,请将其称为SHA1,然后执行git log--名称状态--单行[SHA1^..SHA1]

文件状态标志:

Flag Name Meaning
M modified File has been modified
C copy-edit File has been copied and modified
R rename-edit File has been renamed and modified
A added File has been added
D deleted File has been deleted
U unmerged File has conflicts after a merge

但是,如果看到文件在您的分支和它的共同祖先与另一个分支之间发生了更改(例如,origin/master):

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

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

git diff --name-status mybranch..myotherbranch

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

添加grep可以进一步细化:

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

然后将只显示myotherbranch中添加的文件。


Use

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

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


这将显示文件中的更改:

git diff --word-diff SHA1 SHA2

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

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

另外请注意,如果您只想查看上次提交和之前提交之间的更改文件,这很好:

git show --name-only

基于gitdiff-name状态,我编写了gitdiffviewGit扩展,该扩展呈现了两个路径之间变化的层次树视图。


似乎没有人提到开关--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(-)

正如巧妙的机器人在回答中所说:

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

以下内容对我很有用:

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

它也可以用于单个提交:

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

这对于在Jenkins中使用非常方便,在Jenkins中将为您提供一个变更集SHA哈希值列表,并希望对其进行迭代以查看哪些文件已被更改。

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


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

 git diff --name-status SHA1 SHA2 | grep '\.java$'

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

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

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

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


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

使用--没有寻呼机可以解决这个问题。

git --no-pager  diff --name-only sha1 sha2