此问题的基础可以是Finding a branch point with Git?
.-- X -- A -- B -- C -- D -- F (master)
. \ / \ /
. \ / \ /
. G -- H -- I -- J (branch A)
所以我正在寻找一个git diff,它只包含G + H + I + J的提交
我担心不可能得到它,因为branchA被多次合并回master,master也被多次合并到branchA。
答案 0 :(得分:1)
git diff G J
应该给你G + H + I + J,但是因为你关心合并,你想要的可能是G + H + J的差异 - 不包括合并。我担心你需要创建一个临时分支并挑选这些提交来获得你需要的差异。
答案 1 :(得分:0)
不幸的是,如果不以某种方式创建新的提交,这并没有真正定义。如果没有J
合并的内容I
和B
,C
引入的差异可能就没有意义。
假设J
确实与B
和C
脱节,你需要以某种方式创建新的提交以获得组合差异,因为你要求的是不可能(通常)确定不迭代地应用补丁并查看结果是什么。然而,最快捷的方法不是采摘樱桃。相反,您可以利用rebase
默认情况下不保留合并提交的事实。因此:
# create a temporary copy of branch A
git branch branch-A-tmp branch-A
# rebase that copy in place, thus removing the merge commits
git rebase commit-A branch-A-tmp
# examine the diff
git diff commit-A branch-A-tmp
如果J
中所做的更改与B
和C
中的更改无法分开,并在I
中合并,那么当rebase尝试重新合并时,您将遇到合并冲突-apply J
,从而表明你要求的差异没有明确定义。否则,你将得到你正在寻找的差异。