在git中显示两个提交的非合并差异

Cra*_*ker 13 git diff

我有两个提交,其中一个是另一个的祖先.(它们恰好是分支的起点和终点.我认为不重要,但如果有的话,我会把它包括在内).

我希望看到两个提交之间的差异,但不包括在两次提交之间进行的合并提交(即,具有多个父级的所有提交)期间所做的更改.(基本上,我想要对分支进行任何"真正的"提交,不包括合并.)

这可能吗?如果是这样,你如何做到这一点?

如果有必要,假设在合并提交期间没有解决冲突...但是可以优雅地处理它们的解决方案的奖励积分.

CB *_*ley 9

你的问题有点模棱两可,但我想你想要这个.

git log --no-merges -p branch-start..branch-end
Run Code Online (Sandbox Code Playgroud)

  • 您可能还更喜欢使用“--first-parent”。 (3认同)
  • -p 是票,与 --no-merges 结合使用。谢谢! (2认同)

jmi*_*rez 6

如果您的合并全部来自同一个分支(例如master)或全部包含在另一个分支中,您可以使用此问题中的解决方案

\n\n

假设您有一棵如下所示的树:

\n\n
         x---y-+-z-+-branch\n        /     /   /\n---a---b---c-+-d-+-e---master\n
Run Code Online (Sandbox Code Playgroud)\n\n

您想要比较的两个提交是bbranch。然后,不要直接比较两个提交,而是运行

\n\n
git diff master...branch\n
Run Code Online (Sandbox Code Playgroud)\n\n

将显示分支 ( x,y,z) 上所做的所有更改,不包括master(c,d,e合并) 上的所有更改。请注意,这也会忽略在 master 上完成但尚未在分支中的任何更改。

\n\n

来自文档:

\n\n
\n

git diff [--选项] 提交...提交 [--] [\xe2\x80\xa6\xe2\x80\x8b]

\n\n

此形式用于查看包含第二次提交的分支上的更改,从两个提交的共同祖先开始。“git diff A...B”相当于“git diff $(git-merge-base\n AB) B”。

\n
\n