针对工作树的Git diff分支不包括合并

时间:2014-06-01 01:30:03

标签: git merge

我试图找到当前工作树和另一个分支(例如master)之间的差异,不包括合并提交。

. --a--> . --b--> . (master)
 \       \
  c       \ (merge)
   \       \
    . ----- . --d--> . (current) --e--> (working tree)

现在,git diff master确实显示了工作树的更改,但它也显示了master中的更改而不是当前(-b,c,d,e)。我想看到这些变化不是在主人,也就是说,我想看到c,d和e。

我已尝试使用triple-dot表示法或使用git log,但这些与提示(上次提交)进行比较:

git diff master...
git diff master...current_branch

git log -p --no-merges current..master

返回c和d,即它们不包括e:工作树。

如何让这个差异包括工作树?

1 个答案:

答案 0 :(得分:1)

要记住的关键点是,如果两个分支共享提交X ,那么这对diff 没有任何补充,也就是说,您没有看到任何关于提交的内容差异中的X *。

因此,您只需要对分支点(可以使用merge-base找到)进行区分并对其进行区分:

git diff $(git merge-base current master)

返回c,d和e。

如果这个故事看起来更复杂(有几个合并),这也有效:

. --a--> . --b--> . --- . (master)
 \       \             /
  c       \ (merge)   / (merge)
   \       \         /
    . ----- . ----- . --d--> . (current) --e--> (working tree)

返回d和e。

*这解释了为什么您在a中看不到git diff master

我敢打赌,你现在感到愚蠢!