Git diff工作不正确 - 对许多变化

时间:2013-11-20 10:45:17

标签: git git-diff

           f1---f2                 - short term branch "feature1"
          /       \
      h--h--h---h--h1--h2-         - long term branch "hofix"
     /       \   \      \
    /         \   \      \
   m----m------m---m------m--      - long term branch "master"
                   |      |
                 1e1e1e 2f2f2f

我合并分支与2提交差异(15个文件完全改变)。 跑了:

$ git show --pretty="format:" --name-only 1e1e1e..2f2f2f

我从我的项目中收到了超过42 000个文件。为什么呢?

预期:我将使用f1,f2,h1,h2提交显示差异

P.S。可能是因为“合并分支'来源/ 0411-修补程序'”提交?

1 个答案:

答案 0 :(得分:4)

1e1e1e..2f2f2f表示:

  • 可以从2f2f2f
  • 访问的所有提交
  • 不包括可从1e1e1e
  • 访问的内容

(请参阅SPECIFYING RANGE)中的“gitrevisions

如果这些SHA1引用了两个提交合并,则您有:

    1e1e1e
      |
x--x--x
       \
        Z
       /
y--y--y
      |
    2f2f2f

这将为您提供所有“y”提交中的所有文件,这些文件可能会进行到第一次提交,这意味着您将获得所有文件。

但是,由于git diff 进行一系列提交(而不是git show),您可以尝试,例如“How to “git show” a merge commit with combined diff output” :

git diff --name-only 1e1e1e..2f2f2f

或者只使用合并SHA1'Z',如“List all modified files in git merge commit - even the fast forwarded”:

git log -m -1 --name-only --pretty="format:" <Merge SHA>