近期做的一个项目,参与开发的团队有7、8个,git 分支管理经常出现问题,后来 leader 整理了一份代码管理指导图,如下
使用 cherry-pick
的关键点就是我们在 test 分支上修改完bug后,如何把改动的代码同步到 develop 分支上,显然手动copy只适用于改动量少的情况,改动量多的时候就需要使用 cherry-pick
了
git cherry-pick 的作用
将指定的提交应用于其他分支
$ git cherry-pick <commit-id> // commit-id对应的代码提交应用于当前分支
我们的 develop 分支与 test 分支都是以 main 分支为源新建出来两条分支,develop 分支用于代码开发,test 分支用于测试
stateDiagram-v2
direction LR
[*] --> main
main --> develop
main --> test
state main {
direction LR
a --> b
}
state develop {
direction LR
c --> d
}
state test {
direction LR
e --> f
f --> fixbug
}
我们现在要将 test 分支上的某次提交 fixbug 应用到 develop 分支上
如何操作?
1. 找到提交记录commit-id
先找到 test 分支上需要迁移的提交记录,根据commit-id(使用 git log
或gitlab上的提交记录查看)
2. 然后切换到 develop分支上
合并到哪个分支就切换到哪个分支
$ git checkout develop
3. cherry-pick需要迁移的改动
$ git cherry-pick fixbug
此时 test 分支上 fixbug 的提交就应用到 develop 分支上了,在 develop 分支末尾新增了一次提交
stateDiagram-v2
direction LR
[*] --> main
main --> develop
main --> test
state main {
direction LR
a --> b
}
state develop {
direction LR
c --> d
d --> fixbug'
}
state test {
direction LR
e --> f
f --> fixbug
}
4. 照常commit、push即可提交到远程仓库
在 develop 分支上使用 git status
即可查看所有的更改,包括 cherry-pick 过来的改动,我们还需要 git commit
与 git push
把cherry-pick 过来的改动推送至远程 develop 分支
代码冲突
如果操作过程中发生代码冲突,cherry-pick
会停下来,让用户决定如何继续操作
--continue
- 首先解决冲突
- 解决完之后,先将代码提交至暂存区(
git add .
) - 让
cherry-pick
过程继续执行$ git cherry-pick --continue
--abort
放弃合并,回到操作前的样子
$ git cherry-pick --abort
--quit
代码冲突后,退出 cherry-pick
,但是不回到操作前的样子
$ git cherry-pick --abort
参考文献