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

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

我应该使用什么命令?

答案

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 重命名编辑 - 文件已重命名和修改
已添加 - 已添加文件
D 已删除 - 文件已删除
U 未合并 - 合并后文件有冲突

似乎没有人提到过--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-only `git merge-base origin/master HEAD`

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

git diff --name-status mybranch..myotherbranch

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

添加grep可以进一步优化:

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

然后,将仅显示在myotherbranch添加的文件。

将以下别名添加到您的~/.bash_profile ,然后运行source ~/.bash_profile ; 现在,只要你需要看到更新的文件在最后一次提交,运行, showfiles从您的 git 仓库。

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

这将显示文件中的更改:

git diff --word-diff SHA1 SHA2

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

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

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

正如 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