You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Git:如何更新基于merge-base创建的本地分支

问题:如何简便同步本地分支与同事的最新更改?

我本地有v1.0development两个分支,团队创建本地分支的标准流程是:

git merge-base v1.0 development
git checkout <commit-hash>
git checkout -b <new-branch-name>

近期有位同事按照相同流程创建了他的本地分支,之后执行了以下操作并推送到远程:

git checkout v1.0
git merge <his-local-branch-name>
git push
git checkout development
git merge <his-local-branch-name>
git push

现在我想把自己的本地分支和同事的最新更改同步,但目前的做法是通过merge-base重新创建包含最新更改的分支,再合并我的本地修改,这个过程太繁琐。我尝试过直接git merge <last-commit-hash>(同事分支的最后提交哈希),但产生了大量冲突。请问有没有更简便的方法?


解决方案

其实不用重新创建分支,你可以利用远程仓库已经更新的v1.0development分支来同步,步骤如下:

1. 先拉取远程的最新代码

首先确保你本地的v1.0development分支是远程的最新状态:

# 更新本地v1.0分支
git checkout v1.0
git pull origin v1.0

# 更新本地development分支
git checkout development
git pull origin development

2. 同步你的本地分支

接下来根据你最终要把分支合并到哪个目标分支,选择对应的同步方式:

方式一:如果你的分支最终要合并到v1.0

切换到你的本地分支,将远程最新的v1.0合并进来:

git checkout <your-local-branch>
git merge origin/v1.0

或者如果你偏好线性的提交历史,可以用变基(rebase):

git checkout <your-local-branch>
git rebase origin/v1.0

变基会把你的提交逐个应用到最新的v1.0分支之上,相比直接merge,冲突的粒度更小,更容易逐个解决。

方式二:如果你的分支最终要合并到development

操作逻辑和上面一致,只是目标分支换成development

# 合并方式
git checkout <your-local-branch>
git merge origin/development

# 变基方式
git checkout <your-local-branch>
git rebase origin/development

为什么之前直接merge同事的提交哈希会冲突多?

因为你和同事的分支都是基于同一个旧的merge-base创建的,相当于两条完全并行的修改线,直接merge他的提交时,Git需要一次性合并所有并行的修改,自然会产生大量冲突。而现在同事的修改已经合并到了v1.0/development,这两个分支已经包含了旧基础代码+同事的修改,此时合并/变基到这两个分支,Git只需要处理你的修改和“旧基础+同事修改”之间的差异,冲突会更聚焦,也更容易处理。


内容的提问来源于stack exchange,提问作者mpasko256

火山引擎 最新活动