2015-08-15 47 views
2

由于(非常奇怪)的情况,我现在有一个2根git仓库。我想删除导致第二个根出现的合并。从技术上讲,这些“根”中的每一个都是父项为0的提交。Rebase合并从未发生

我想摆脱导致两个根的合并。

我用git樱桃采摘,并没有工作,它似乎不适用任何更改。

为了清楚我想要一个',b'和c'全部消失(它们是a,b和c由不良rebase引起的破坏副本)。

a <- b <- c \ /g <- h \ d -f origin/master a' <- b' <- c'/ \ i <- j /

回答

2

如果通信或其他人的工作已经基于关闭任何在它的祖先d是一个问题,只考虑与两个根的生活,如果你喜欢的提交,其余他们几乎后果无论如何。

你想转储合并的效果,或只是祖先?

如果提交d包含要保存更改,或包含任何改动,

echo `git rev-parse $d $d^` >.git/info/grafts 
git filter-branch -- --all 
rm .git/info/grafts 

将做到这一点。

如果提交d包含更改,您不想保留,那么你可以变基合并废除

git rebase -p --onto $d^ $d..origin/master 

$的是shell变量语法,替代你喜欢的任何命名参考提交。

像这样的任何历史重写都会对其他提交的重构造成影响(即可以跟踪重写的重写)。因此,之后,您需要强制推送origin/master,并让其他人重新提取并进行必要的重新绑定,如果他们自己的作品基于自c以来的任何提交。

+0

键盘到编辑框的警告,但我相信这些是正确的。 – jthill

+0

我试过了,我得到了“以前的樱桃选择现在是空的,可能是由于解决冲突。” – Snark

+1

你指的是什么樱桃? Afaik既不会过滤分支也不会分配这个消息。 – jthill