工作中经常会碰到一些情形,就是部门里大家基于某个branch比如说叫develop 因为不同的开发需求创建自己的branch比如叫A,B,C。在某一时刻,branch A有了修改更新了,这时候我们别的分支想要同步这些更新该怎么做呢?
方法一. 合并分支
最简单方便。我们在需要同步的分支比如分支B这,用$git merge A 命令把分支A合并入分支B。
但有时候我们并不需要分支A上所有的修改,我们只需要一部分修改更新同步过来即可,这时候该怎么做呢?
方法二. 复制黏贴
最暴力费神。我们直接把分支A中需要更新的修改内容复制黏贴到分支B中。但文件一多就很容易遗漏一些部分。
方法三. “摘樱桃”同步部分提交
最准确合适。我们只需要同步部分代码变动(某几个提交)到另外一个分支即可。这时候我们用$git cherry-pick [commitID]
命令,cherry-pick命令直译过来就是摘樱桃,该命令会返回一个变量集表示该分支工作树与其父级工作树之间的差异,并将其应用于当前分支。最后我们再用命令$git push 上传到远端即可。
以我这次同步更新为例:
首先我在codehub页面找到需要同步更新的commit ID,一般在代码页面的历史记录里都可以找到。复制黏贴圆圈里的数字(这几个数字是commitID的前面几个数字,可以只复制这几个,一般来说是不会有重复的;保险起见,就点击ID旁边的复制按钮复制所有ID号码)。
然后我在本地branch里,用命令$git cherry-pick 6cc440c4
,但这时候会有个坑,因为如果一个提交有两个或更多父母,它也代表两个或更多的差异。我们得告诉git我们要用哪个父母,否则的话会显示错误“error: commit 6cc440c4XXXXXXX is a merge but no -m option was given. fatal: cherry-pick failed”。
我这里用的$git cherry-pick -m 1 6cc440c4
命令告诉cherry-pick命令计算diff的第一个。然后他就会返回我们一个集合,显示有哪些不一样的地方并应用于当前本地分支。
接着我们要做的就是输入$git add *
,$git push
命令同步到我们分支的远端。
转载自华为云社区,文章作者 gentle_zhou