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

时间:2009-10-12 01:48:07

标签: git git-diff git-show

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

我应该使用什么命令?

15 个答案:

答案 0 :(得分:2276)

git diff --name-only SHA1 SHA2

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

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

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

答案 1 :(得分:375)

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

答案 2 :(得分:50)

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

答案 3 :(得分:46)

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

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

答案 4 :(得分:19)

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

git diff --name-status mybranch..myotherbranch

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

添加grep可以进一步细化:

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

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

答案 5 :(得分:8)

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

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

答案 6 :(得分:7)

这将显示文件中的更改:

git diff --word-diff SHA1 SHA2

答案 7 :(得分:4)

另请注意,如果您只想查看上次提交与之前提交之间的更改文件。这很好用:git show --name-only

答案 8 :(得分:3)

使用 git log --pretty = oneline&gt; C:\ filename.log

将仅记录更改文件名称的oneline( - pretty = oneline)。还会将所有详细信息记录到输出文件中。

答案 9 :(得分: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

答案 10 :(得分:1)

以下对我来说很有效:

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

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

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

在Jenkins中很方便,在Jenkins中提供了changeSet SHA的列表,并且想要遍历它们以查看哪些文件已更改。

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

答案 11 :(得分:1)

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

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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

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

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

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

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

答案 14 :(得分:0)

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

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

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