首页 文章

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

提问于
浏览
1558

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

我应该使用什么命令?

12 回答

  • 2129

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

    git diff --name-only `git merge-base origin/master HEAD`
    
  • 38
    git diff --name-only SHA1 SHA2
    

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

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

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

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

  • 43

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

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

    git diff --name-status mybranch..myotherbranch
    

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

    添加 grep 可以进一步细化:

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

    然后,这将只显示 myotherbranch 中添加的文件 .

  • 2

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

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

    这将显示文件中的更改:

    git diff --word-diff SHA1 SHA2
    
  • 3

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

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

  • 0

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

  • 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
    
  • 19

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

  • 8

    以下适用于我:

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

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

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

    这在Jenkins中很方便,你可以在其中获得一个changeSet SHA列表,并希望迭代它们以查看哪些文件已被更改 .

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

相关问题