Git diff 工作不正确 - 许多更改

max*_*xgu 2 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
Run Code Online (Sandbox Code Playgroud)

我合并了有 2 个提交差异的分支(总共更改了 15 个文件)。并跑:

$ git show --pretty="format:" --name-only 1e1e1e..2f2f2f
Run Code Online (Sandbox Code Playgroud)

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

预期:我将显示 f1、f2、h1、h2 提交的差异

PS 可能是因为“合并分支'origin/0411-hotfix'”提交?

Von*_*onC 5

1e1e1e..2f2f2f方法:

\n\n
    \n
  • 所有可从以下位置访问的提交2f2f2f
  • \n
  • 排除那些可以到达的1e1e1e
  • \n
\n\n

(参见“指定范围gitrevisions

\n\n

如果这些 SHA1 引用合并的两个提交,您将拥有:

\n\n
    1e1e1e\n      |\nx--x--x\n       \\\n        Z\n       /\ny--y--y\n      |\n    2f2f2f\n
Run Code Online (Sandbox Code Playgroud)\n\n

这将为您提供所有 \' \' 提交中的所有文件y,这可能会一直到第一个提交,这意味着您将获得所有文件。

\n\n

但是,由于不需要一定范围的提交(与 相反),您可以尝试,如“如何 \xe2\x80\x9c \xe2\x80\x9d 具有组合差异输出的合并提交”:git diff git showgit show

\n\n
git diff --name-only 1e1e1e..2f2f2f\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者简单地使用合并 SHA1 \' Z\',如“列出 git merge commit 中所有修改的文件 - 甚至是快进的”:

\n\n
git log -m -1 --name-only --pretty="format:" <Merge SHA>\n
Run Code Online (Sandbox Code Playgroud)\n