我正在尝试将 CVS 存储库导入 git。不幸的是,我们一直在使用一种非常古老的方法从我们的 CVS 存储库创建版本,它不涉及任何实际的 CVS 分支或标签,而是将这些信息保存在一个单独的系统中。因此,几乎所有的开发都发生在 CVS 主干上。因此,一个文件可能会在历史记录的很早的时候添加,但在 6 个月内不会成为发布的一部分。
我想做的是将这个 CVS 存储库导入到 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
进行 rebase 会导致:
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
我可以让 git 在一个 rebase 命令中将 topic
rebase 到 E'
上吗?我可能有很多分支,我想将它们移动到相应的新提交上。或者有什么方法可以获得 E
和 E'
之间的映射?
最佳答案
F---G---H topic
/
A---B---C---D---E---I---J master
git checkout B
git branch BRANCH-B
git checkout master
git rebase -i HEAD~6
(删除提交 B)
git rebase --onto D' D topic
假设没有冲突,应该这样做 ;)
关于git rebase 并保留所有子分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19060326/