我在项目进行到一半的时候开始使用Git,在最初的两个提交中只是添加了一些初始设置(.gitignore和.gitattributes),第三个提交M2添加了SVN主干的内容:
I1 -- I2 -- M2 -- N -- .. -- Z
我将SVN历史记录导入了一个名为svn的分支,在该分支中,M1是SVN主干(与M2具有相同的内容,除了.gitignore和.gitattributes):
A -- B -- ... -- K -- L -- M1
Q: 如何最好地合并这两个分支?
我可以将 M1 和 M2 合并成 M3,然后进行变基操作,但我不知道如何删除 I1 和 I2 提交,以及是否可以安全地删除 M3 提交(我发现一些建议保留合并提交,但在这种情况下,M3 不再必要)。
A -- B -- ... -- K -- L -- M1
\
M3 -- N' -- .. -- Z'
/
I1 -- I2 -- M2 -- N -- .. -- Z
另一种方法是手动挑选N .. Z提交记录并将其合并到svn分支,但我希望避免这种方法。
最优雅的解决方案是将由N .. Z提交引入的更改在svn分支之上重新派生,但我还没有找到两个没有共同祖先的分支所需的语法。
git filter-branch
”根据移植点重写历史记录,将移植的先辈关系转换为真正的先辈关系。但这将重写历史记录。 - Jakub Narębskigit replace
实际上已经提交到了代码库。或者至少可以这样做。 - Ivan Danilov