我决定从其他旧版本控制系统追溯提交 Git 中从未有过的历史记录。所以我创建了一个孤立分支“newroot”,并将来自其他版本控制系统的提交导入到它。后续问题Insert a commit before the root commit in Git?
“newroot”分支最终的文件与“master”分支的根提交完全匹配。
现在我想将“master”分支 rebase 到“newroot”孤儿分支上,例如:
git rebase --onto newroot --root master
问题是系统提示我解决所有 merge 冲突。多年来有数百次 merge 。我只是无法手动解决它们。而且真的没有必要,因为这些 merge 在过去已经解决了。由于 rebase 实际上不会更改内容(因为我是在同一棵树上 rebase ),所以我希望 Git 准确地“重放 merge ”。
有没有办法指定 rebase 应该使用与之前使用的分辨率相同的分辨率?
我知道“rerere”可能在这里有所帮助。但是我必须在最初 merge 时已经启用它,对吗?或者我可以回顾性地重新创建“rerere”缓存吗?
我可以为我的任务想象一个替代解决方案。以某种方式要求 Git 连接“newroot”和“master”分支,而不实际 rebase 。但我不确定这是否可能。
最佳答案
To somehow ask Git to concatenate the "newroot" and "master" branches, without actually rebasing. But I'm not sure if that's possible.
这叫做 graft point , 其次是 filter-branch
为了重写主历史。
参见 this post as an example或 this question .
在 rebase 方面,您可以尝试使用像他们那样的 merge 策略,使用 master 分支内容解决任何冲突(因为 master 正在 rebase )
git rebase --merge -s recursive -X theirs --onto newroot --root master
关于git - 解决 git rebase 冲突的方式与之前解决冲突的方式相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38092355/