我试图找到当前工作树和另一个分支(例如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:工作树。
如何让这个差异包括工作树?
答案 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
。
我敢打赌,你现在感到愚蠢!