我正在尝试将一个CVS存储库导入到git中。不幸的是,我们一直使用一种非常古老的方法从我们的CVS repo创建发布版本,这并不涉及任何实际的CVS分支或标记,但将该信息保存在单独的系统中。因此,几乎所有的开发都发生在CVS主干上。所以,一个文件可能在历史早期被添加,但在6个月后才成为发布的一部分。
我想做的是将这个CVS repo导入git,并使用rebase将这些提交移动到开发分支中。虽然我确实有一些来自CVS的分支,但我真的想移动所有分支。
假设我有这样一个结构:
F---G---H topic
/
A---B---C---D---E---I---J master
B
是我想要移动到它自己的分支的提交。我希望结果看起来像这样:
F`---G`---H` topic
/
A---C`---D`---E`---I`---J` master
\
B some_unfinished_feature
但是仅在master
上进行变基会产生以下结果:
git checkout -b some_unfinished_feature B
git rebase --onto A B master
A---C`---D`---E`---I`---J` master
\
\ F---G---H topic
\ /
B---C---D---E
\-some_unfinished_feature
在一个rebase命令中,我能否让git将topic
变基到E'
?我可能有很多分支需要移动到相应的新提交上。或者我是否可以获得E
和E'
之间的映射关系?
filter-branch
可能是有意义的,否则最好自动化汲取过程。 我编写了一个名为ggrbm
(“Git Rebase Multiple”)的实用程序,可以帮助解决这个问题,但可能需要进一步开发。 - Adam Spiers