git cherry-pick初体验

837 阅读1分钟

近期做的一个项目,参与开发的团队有7、8个,git 分支管理经常出现问题,后来 leader 整理了一份代码管理指导图,如下 image.png

使用 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 commitgit push把cherry-pick 过来的改动推送至远程 develop 分支

代码冲突

如果操作过程中发生代码冲突,cherry-pick 会停下来,让用户决定如何继续操作

--continue

  1. 首先解决冲突
  2. 解决完之后,先将代码提交至暂存区(git add .
  3. cherry-pick 过程继续执行
    $ git cherry-pick --continue
    

--abort

放弃合并,回到操作前的样子

$ git cherry-pick --abort

--quit

代码冲突后,退出 cherry-pick,但是不回到操作前的样子

$ git cherry-pick --abort

参考文献

[1]阮一峰.git cherry-pick 教程[J/OL].http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html,2020-04-27/2021-12-07