2011-11-14 247 views
2

这个问题的基础上,可以像在Finding a branch point with Git?Git diff来回合并?

.-- X -- A -- B -- C -- D -- F (master) 
.   \ / \ /
.   \ / \ /
.    G -- H -- I -- J (branch A) 

所以我在寻找一个git的差异,其中包括只在G + H + I + J的承诺

恐怕是不可能得到它,因为branchA被多次合并回到master,并且master也被合并到branchA几次。

+0

不禁想知道为什么提交E被忽略:) – CodeReaper

回答

1

git diff G J应该给你G + H + I + J,但既然你关心合并,你想要的可能是G + H + J的差异 - 排除合并。恐怕您需要创建一个临时分支并挑选这些提交以获得您需要的差异。

+0

是的,你说得对,我需要H + J,我不需要G + I这是合并。我希望有另一种方式,不仅是樱桃采摘,因为H + J不仅是两次提交,还有更多... –

+0

也许你可以自动采摘樱桃。我想不出更好的。问题是樱桃采摘也可能带来冲突,这就是为什么我怀疑存在更好的方式。 –

+0

我无法为此创建任何良好的樱桃挑选自动化,因为我不想一个一个地定义提交,因为提交的数量(大约100)。 –

0

不幸的是,没有创建新的提交,这没有真正定义。如果没有合并I,即BC,由J引入的diff可能没有意义。

假设J真的是从BC脱节,你需要以某种方式,以获得合并diff来创建新的提交,因为什么你问的是不可能的(一般),以确定没有反复应用补丁并看到结果是什么。尽管如此,最快捷的方法不是樱桃采摘。相反,您可以利用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所做的更改不是可分离不同于BC,合并在I,企图重订时重新申请J,您将获得合并冲突从而表示DIFF你'要求不明确。否则,你会得到你正在寻找的差异。