Git将落后于当前分支的待合并分支合并到当前分支的操作咨询
问题1:待合并分支落后于当前分支时,原操作的运行逻辑
你对git pull操作的原有理解存在小偏差:默认配置下,git pull是git fetch + git merge的组合操作,仅当当前本地分支是待合并远程分支的祖先节点时,才会直接快进把当前分支指针移动到远程分支的HEAD位置,其他场景都会走三方合并逻辑。
当待合并的branch-to-merge提交进度落后于当前mybranch时,原操作的运行结果分两种场景:
- 若
branch-to-merge没有任何mybranch未包含的独有提交,也就是branch-to-merge完全是mybranch的祖先节点,执行原git pull操作会直接提示Already up to date.,不会产生任何改动。 - 若
branch-to-merge虽然整体提交进度落后,但存在mybranch没有的独有提交,两个分支属于分叉状态,执行原git pull操作会触发三方合并:无重合修改时会自动生成合并提交,有重合修改时会提示合并冲突,需要手动解决冲突后完成合并。
问题2:集成落后分支代码改动的解决方案
根据你的使用场景可以选择以下三种常用方案:
方案1:直接合并(推荐,保留完整提交历史)
适合需要集成branch-to-merge所有改动、且希望保留完整提交溯源路径的场景,操作步骤如下:
- 切换到你的特性分支,确认工作区无未提交改动:
git checkout mybranch git status
- 拉取远程待合并分支的最新代码到本地缓存:
git fetch origin branch-to-merge
- 执行合并操作:
git merge origin/branch-to-merge
如果出现合并冲突,手动解决冲突后执行git add <冲突文件>,再执行git commit即可完成合并。
方案2:cherry-pick 拣选提交
适合只需要branch-to-merge中部分提交改动、不需要全量合并的场景:
- 先拉取远程待合并分支的最新代码,再查看提交日志获取你需要的提交哈希值:
git fetch origin branch-to-merge git log origin/branch-to-merge
- 执行拣选操作,把指定提交的改动应用到当前分支:
git cherry-pick <目标提交的哈希值>
如果出现冲突,解决冲突后执行git add <冲突文件>,再执行git cherry-pick --continue即可完成操作。
方案3:变基(仅适用于本地未共享的分支)
适合不想要生成合并提交、希望保持线性提交历史的场景,注意如果你的mybranch已经推送到远程仓库和其他人协作,不要使用该方案,会修改公共提交历史导致协作异常:
- 拉取远程待合并分支的最新代码:
git fetch origin branch-to-merge
- 执行变基操作:
git rebase origin/branch-to-merge
如果出现冲突,解决冲突后执行git add <冲突文件>,再执行git rebase --continue直到所有变基步骤完成即可。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

