我有一个从SVN转换的Git存储库。
现在我在Git中有一些未合并的分支但是我知道它们已经合并到SVN中继线(我想原因是在分支合并时,SVN不支持svn:mergeinfo属性)。但是,从提交消息中我知道合并分支的提交(在主干/主服务器上)。
有没有办法在Git中注入合并提交(例如使用filter-branch),以便这些分支在Git世界中也能完全合并?
答案 0 :(得分:0)
答案是“是的,但这很痛苦”。
处理此问题的最不痛苦的方法是使用git replace
来构建您想要的嫁接图。然后,如果您希望它成为永久性的,请使用一个最终的无操作样式git filter-branch
来使替换永久化。因为git replace
只是写了新的对象(如果你弄错了就可以调整或删除它们),你通常会查看现有的对象,你可以采取然而,要做到正确,需要采取许多措施。如果你有多个合并来假装,这将不那么痛苦。
请注意,一旦您将替换永久化,哈希ID将全部更改,以便最终的Git存储库不再与您从新转换获得的内容匹配。
答案 1 :(得分:0)
谢谢,这非常有帮助。在用正确的术语再次搜索之后,我找到了以下解决方案:
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do git branch --track "${branch##*remotes/origin/}" "$branch"; done
git replace --graft <merge commit> $(git show --pretty=%P <merge commit> | head -1) <additional parent>
git filter-branch --tag-name-filter cat -- --all
git push -f --all; git push -f --tags