GIT SVN:获取重新创建的SVN分支,没有错误的合并父级

时间:2015-11-25 12:16:49

标签: git svn git-svn

我的上游Post.available.where( user.likes.where(post_id: Post.arel_table[:id]).exists.not ) 存储库存在以下情况:

我创建了一个svn分支,并在其上做了一些工作,这导致了一个非常复杂的历史。所以我再次删除了它,保留了git提交,这使我能够很好地清理历史记录。

准备好补丁系列后,我使用svn重新启动了我的分支,然后是svn copy。我的想法是,我会将已清理的历史记录重新绑定到新的git svn fetch分支,以便我可以使用svn轻松发布它。

然而,git svn dcommit并没有达到我的预期。这是我的预期(假git svn fetch输出):

git log --oneline --decorate --graph

但这就是我得到的:

* xxxxxxx (svn-branch)
* xxxxxxx (svn-parent-branch)
...
somewhere further down, unrelated to the above
* xxxxxxx (old-svn-branch-head)

如您所见,* xxxxxxx (svn-branch) |\ | * xxxxxxx (svn-parent-branch) | * xxxxxxx (old-svn-branch-head) 完全忽略了git svn fetch分支被删除的事实,将重新创建的svn提交映射到svn中的合并提交。现在,我不会对此大惊小怪,如果这不重要,但不幸的是,错误的连接会混淆git的合并算法,在新的分支基础上进行重新定位时会产生虚假的合并冲突提交。

所以我的问题是:我怎么能诱使git没有将新的分支基础提交与错误的父级链接,或者以某种方式修复我的git repo,使我保留发布我的东西的能力git svn fetch?当然,我总是可以删除整个事情,并创建一个具有不同名称的新git svn dcommit分支,但我想知道是否存在更好的解决方案。

1 个答案:

答案 0 :(得分:2)

我遇到了类似的情况,仍然无法找到关闭此行为的方法(--no-follow-parent关闭整个分支跟踪,这不是我想要的。)

我最终用git replace --graft修复了历史记录。它创建了一个替换提交和keeps its children unchanged。在替换之后(例如git replace --graft svn-branch svn-parent-branch),这就是你所看到的:

* svn-branch
|
* svn-parent-branch
...
* old-svn-branch-head

您仍然可以使用gitk --all选项查看原始提交。

* svn-branch (replacement)
| 
| * svn-branch (original)
|/|
* |  svn-parent-branch
| |
| * old-svn-branch-head
...