Git进阶之cherry-pick、rebase

cherry-pick

cherry-pick 的作用在于把一个分支上的commit应用到另外一个分支上,感觉上和git merge 作用差不多,但cherry-pick可以选一个分支中一个或者几个commit来应用提交到另外一个分支,操作单元是commit 不是branch。
操作示例:

现在有两个分支,develop分支比master分支多两个提交。

git branch
      develop
    * master
复制代码

master提交记录:

commit 8aa7b35db1bd247fb65c88c2b63605512ea09512 (HEAD -> master)
Author: ningcg <ningcg@163.com>
Date:   Wed Aug 11 22:35:47 2021 +0800

    init
复制代码

develop提交记录:

commit cf8198e508417b9d1eea120387dff956fd925c92 (HEAD -> develop)
Author: ningcg <ningcg@163.com>
Date:   Wed Aug 11 22:37:22 2021 +0800

    develop commit2

commit 85a49c7d80165865e152b0315ca66844f1efa46e
Author: ningcg <ningcg@163.com>
Date:   Wed Aug 11 22:36:55 2021 +0800

    develop commit1

commit 8aa7b35db1bd247fb65c88c2b63605512ea09512 (master)
Author: ningcg <ningcg@163.com>
Date:   Wed Aug 11 22:35:47 2021 +0800

    init
复制代码

想要把develop分支上的85a49c7d80165865e152b0315ca66844f1efa46e这一个commit提交到master,可以使用git cherry-pick 85a49c7d80165命令。

rebase

  • rebase:变基,即改变分支的根基
  • 从某种程度上来说,rebase和merge可以完成类似的工作,不过二者的工作方式有着显著的差别

我们可以通过分支合并的流程图来看看merger和rebase的区别

  1. 分支初始的样子

image.png
2. 把origin分支merge到mywork分支后的效果:

image.png
merge后新的C7提交,父提交有两个C4、C6
3. rebase后分支的效果

git checkout mywork
git rebase origin
复制代码

image.png
rebase后的历史提交相当于一条直线了

image.png
rebase会修改提交历史,rebase的过程相当于把一个分支上的提交应用到另外一个分支上。

rebase注意事项
  • rebase过程中也会出现冲突
  • 解决冲突后,使用git add添加,然后执行
    • git rebase –continue
  • 接下来Git会继续应用余下的补丁
  • 任何时候都可以通过如下命令终止rebase,分支会恢复到rebase开始前的状态
    • git rebase –abort
rebase最佳实践
  • 不要对master分支执行rebase,否则会引起很多问题
  • 一般来说,执行rebase的分支都是自己的本地分支,没有推送到远程版本库
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享