为何执行git rebase --strategy-option=theirs master仍产生冲突?
为什么指定
--strategy-option=theirs后,Git变基仍因冲突终止? 首先,你搞反了参数的含义
在git rebase里,ours和theirs的指向和git merge是完全颠倒的:
- 用
git merge时,ours指当前分支,theirs指被合并进来的分支 - 但
git rebase是把当前分支的提交一个个“重演”到目标分支(master)上,这时候目标分支(master)是ours,当前分支的提交是theirs
你原本想保留当前分支的内容自动解决冲突,应该用--strategy-option=ours,而不是theirs——之前的命令其实是让Git优先用master的内容来解决冲突,和你的预期完全相反。但就算参数对了,还是可能遇到Git搞不定的冲突。
其次,有些冲突Git没法自动处理
以下几种情况,就算你指定了theirs或ours,Git还是会停下来让你手动解决:
- 文件存在性冲突:比如master删了某个文件,你却在当前分支改了这个文件;或者两边都加了同名但内容不一样的文件
- 复杂代码块冲突:同一个代码块被两边改得面目全非,Git没法判断你要留哪一个版本
- 元数据冲突:文件权限、换行符类型这类非内容的修改冲突,策略参数管不着
怎么解决?
- 先终止当前失败的变基:
git rebase --abort - 用正确的参数重新变基(保留当前分支内容):
git rebase --strategy-option=ours master - 如果还是碰到冲突,手动改完冲突文件后执行:
git add <冲突文件名> git rebase --continue
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

