git - 解决 git rebase 冲突的方式与之前解决冲突的方式相同

标签 git git-merge rebase git-rebase git-merge-conflict

我决定从其他旧版本控制系统追溯提交 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 examplethis 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/

相关文章:

git - 我的 Github 仓库有 'main' 和 'master' 分支——它们的目的是什么?

git-merge - Git 合并因段错误而失败

git - 如何撤销有冲突的 git merge

git - Git如何选择重新设定基准的起点?

git - Git更新后无法推送

git - 我可以将 git blame 配置为始终忽略某些提交吗?想要一劳永逸地修复 git blame

git - 回滚到公共(public)仓库中的旧 Git 提交

merge 期间的 Git pull 和 merge

git - 有没有一种快速的方法可以将长期提交到 master 分支的历史 rebase ?

svn - 我做错了吗?将 SVN 更改从主干 merge 到 git 分支。使用 merge --squash