我有一个跟踪上游SVN分支的本地分支,在我进行本地更改的同时完成了大量的开发工作。在那段时间里,我经常将上游合并到我自己的分支中,以及挑选出来的孤立提交并将它们发送到上游。所以,从本质上讲,我的历史看起来像一个巨大的集群节点:
A--B--C--D--b'-E--F--e'--G--H (svn)
\ \ \ \
a--b--c--d--e--f--g--h--i--j (mine)
也就是说,上游包含来自e的更改,而我的分支包含来自上游的所有更改。现在我想去
A--B--C--D--b'-E--F--e'--G--H
\
a--b--d--f'-g--h--i
(f'是手动合并解决方案的剩余部分)。其他困难包括在svn分支中重命名,我在其中一个合并提交中也遵循了这一点,其中我的分支在合并之前和之后都包含对文件的更改。
知道如何做到这一点吗?显而易见的git rebase -m svn mine
并没有完全削减它,因为它无法检测到重命名,并且在我的分支的尖端与上游分支具有完全相同的内容的行中询问了很多关于冲突的问题。
答案 0 :(得分:1)
你可以尝试(只是一个疯狂的猜测):
git rebase -i --onto H a j
# then remove all commits you don't want (already cherry-picked)
# hope the best :D
另一种可能性,取决于提交的数量,将分别挑选每个提交。我认为新版本的git甚至可以选择提交范围,但我不确定