Rad*_*dim 3 svn git git-merge git-rebase
存储库A:在修订时从项目的SVN迁移到git r:克隆整个事物,包括SVN的所有历史,标记等.之后对git进行一点开发.
存储库B:同一个项目,但在修订时从SVN独立迁移r+small_number.只有最新的快照被带入git.之后有很多独立的发展.
现在我将A合并到B.想法是SVN将被丢弃,开发将继续在developGitHub项目的回购分支中.我用简单的合并来完成这项工作; 幸运的是,真正的冲突很少.开发主要是在不同的领域,虽然合并后有很多清理,与git无关.
但是:现在,当我做,例如git rebase -i HEAD~2对合并后的结果,我的理解应该让我重订的最后两次提交,我招呼着一些300+的页面提交- 该项目的全部历史,因为在SVN版本1.我因为害怕搞砸了而放弃了这一点(显然我是一个完整的Git新手).
预期结果如何?这是可取的吗?如果没有,如何解决?
请注意,所有单元测试等都通过,文件本身都可以,只是我不明白git元数据/历史记录发生了什么.
编辑:这是我*想*库貌似现在:
r A
... o --- o --- ... o
\
B \
o --- .... o ---- o --- ... o
r+small_number C HEAD
Run Code Online (Sandbox Code Playgroud)
我想这种行为的发生是因为你试图通过合并提交来重新定义.
对于以下答案,我假设您的历史记录如下所示,即存储库A和B完全独立:
r A
... o --- o --- ... o
o ... o
r' B
Run Code Online (Sandbox Code Playgroud)
你需要问问自己你想要达到的目标是什么?所以你想要一个新的分支C包含A和B的变化.这里的优先级是什么?你想要创造一个适当的历史; 纠正r'失去SVN历史的事实?或者保持A和B的git历史不变是很重要的?
我的回答是假设你想要实现前者.由于A和B都来自SVN存储库的非常相似的版本,因此在合并公共历史记录之前给它们提供一个共同的git基础可能是一个好主意.所以,理想情况下,在合并之前你会遇到这种情况:
r A
... o --- o --- .... o
\
\
o --- .... o
r+small_number B
Run Code Online (Sandbox Code Playgroud)
目前,我不确定哪种方法是实现这一目标的最佳途径,但您可以尝试一下git rebase -p --onto r --root B.
那么你可以只用git mergeA和B来结束历史
r A C
... o --- o --- .... o --- o
\ /
\ /
o --- .... o
r+small_number B
Run Code Online (Sandbox Code Playgroud)
其中C包含您的所有更改.我可能会把它留在那; 没有任何进一步的变基.
| 归档时间: |
|
| 查看次数: |
1665 次 |
| 最近记录: |