如何在经多次Git Merge与Pull的分支上实现干净Rebase并复用冲突解决结果?
在他人维护分支上实现干净Git Rebase的方案
1. 实现需求的最简方式
直接借助git rebase的冲突解决策略参数,一步完成操作:
- 若要让Git自动采用你当前正在rebase的分支的修改解决冲突,执行:
git rebase -X theirs <目标分支名> - 若要让Git自动采用他人维护的目标分支的修改解决冲突,执行:
git rebase -X ours <目标分支名>
注意:rebase场景下的ours和theirs含义与merge时相反——ours指向你当前操作的分支,theirs指向被rebase的目标分支,别混淆。
执行后如果无冲突,rebase会自动完成;若仍有无法自动解决的冲突,手动修改冲突文件后执行git add <冲突文件>,再用git rebase --continue推进,直到整个rebase流程结束。
2. 能否复用他人此前的冲突解决方案?
可以,Git的rerere(reuse recorded resolution)功能专门解决这个问题:
- 先开启该功能(可选全局或当前仓库生效):
# 全局开启,所有本地仓库都生效 git config --global rerere.enabled true # 仅当前仓库开启 git config rerere.enabled true - 当遇到与他人之前解决过的完全相同的冲突时,
rerere会自动调用历史解决方案,无需手动重复操作。只要冲突的代码块匹配之前记录的内容,Git就会自动应用已有的解决结果。 - 若需要管理或查看记录的解决方案,可使用以下命令:
- 查看所有已记录的冲突项:
git rerere status - 查看某次冲突的具体解决内容:
git rerere diff
- 查看所有已记录的冲突项:
开启rerere后,无论是rebase还是merge操作,遇到重复冲突都会自动复用历史方案,很适合多人协作的分支维护场景。
内容的提问来源于stack exchange,提问作者user2167582
相关产品推荐
相关产品推荐

