使用Git

时间:2017-01-05 19:53:56

标签: git svn merge

我有一个从SVN转换的Git存储库。

现在我在Git中有一些未合并的分支但是我知道它们已经合并到SVN中继线(我想原因是在分支合并时,SVN不支持svn:mergeinfo属性)。但是,从提交消息中我知道合并分支的提交(在主干/主服务器上)。

有没有办法在Git中注入合并提交(例如使用filter-branch),以便这些分支在Git世界中也能完全合并?

2 个答案:

答案 0 :(得分:0)

答案是“是的,但这很痛苦”。

处理此问题的最不痛苦的方法是使用git replace来构建您想要的嫁接图。然后,如果您希望它成为永久性的,请使用一个最终的无操作样式git filter-branch来使替换永久化。因为git replace只是写了新的对象(如果你弄错了就可以调整或删除它们),你通常会查看现有的对象,你可以采取然而,要做到正确,需要采取许多措施。如果你有多个合并来假装,这将不那么痛苦。

请注意,一旦您将替换永久化,哈希ID将全部更改,以便最终的Git存储库不再与您从新转换获得的内容匹配。

答案 1 :(得分:0)

谢谢,这非常有帮助。在用正确的术语再次搜索之后,我找到了以下解决方案:

  1. 获取所有远程分支:for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do git branch --track "${branch##*remotes/origin/}" "$branch"; done
  2. 添加其他父级以合并提交:git replace --graft <merge commit> $(git show --pretty=%P <merge commit> | head -1) <additional parent>
  3. 重写历史记录:git filter-branch --tag-name-filter cat -- --all
  4. 将更改推送到远程:git push -f --all; git push -f --tags