![](/img/trans.png)
[英]Merge two identical git-svn branch HEADs without losing link with git-svn remote branch?
[英]GIT SVN: fetching a recreated SVN branch without the wrong merge parent
我的上游svn
存储库有以下情况:
我创建了一个svn
分支,并在其上做了一些工作,这导致了一个非常复杂的历史。 所以我再次删除了它,保留了git提交,这让我可以很好地清理历史。
一旦我准备好补丁系列,我使用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 svn fetch
没有将新的分支基础提交与错误的父级链接,或以某种方式修复我的git repo,我保留了使用git svn dcommit
发布我的东西的能力? 当然,我总是可以删除整个事情,并创建一个具有不同名称的新svn
分支,但我想知道是否存在更好的解决方案。
我遇到了类似的情况,仍然无法找到关闭此行为的方法( - --no-follow-parent
关闭整个分支跟踪,这不是我想要的)。
我最终用git replace --graft
来修复历史。 它创建一个替换提交并保持其子项不变 。 在替换之后(例如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
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.