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

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

我应该使用什么命令?

1056950 次浏览
git diff --name-only SHA1 SHA2

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

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

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

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未合并合并后文件有冲突

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

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

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

git diff --name-status mybranch..myotherbranch

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

添加grep可以进一步完善:

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

这将仅显示在myotherbranch中添加的文件。

使用

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

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

这将显示文件中的更改:

git diff --word-diff SHA1 SHA2

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

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

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

git show --name-only

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

似乎没有人提到开关--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 HEAD40      10      core/src/main/java/org/apache/calcite/rex/RexSimplify.java1       1       core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java16      0       core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java8       11      core/src/main/java/org/apache/calcite/util/SaffronProperties.java24      0       core/src/test/java/org/apache/calcite/test/RexProgramTest.java8       0       core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java15      0       core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml1       1       pom.xml4       3       spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java

--shortstat

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

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

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

我的例子:

git diff --name-status 78a09k12067c24d8f117886c4723ccf111af49974b95d595812211553070046bf2ebd807c0862ccaM       views/layouts/default.ctpM       webroot/css/theme.cssA       webroot/img/theme/logo.png

以下内容对我很有效:

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

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

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

这对于在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命令。

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

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