• 精通git,没用过git cherry-pick?


    前言

    git cherry-pick是git中非常有用的一个命令,cherry是樱桃的意思,cherry-pick就是挑樱桃,从一堆樱桃中挑选自己喜欢的樱桃,在git中就是多次commit中挑选一个或者几个commit出来,也可以理解为把特定的commit复制到一个新分支上。

    应用场景

    commit 都提交了,为什么还要复制新的出来?

    应用场景1:有时候版本的一些优化需求开发到一半,可能其中某一个开发完的需求要临时上,或者某些原因导致待开发的需求卡住了已开发完成的需求上线。这时候就需要把 commit 抽出来,单独处理。

    应用场景2:有时候开发分支中的代码记录被污染了,导致开发分支合到线上分支有问题,这时就需要拉一条干净的开发分支,再从旧的开发分支中,把 commit 复制到新分支。

    命令使用

    复制单个

    现在有一条feature_cherrypick分支,commit 记录如下:

    1. commit 09cc27103ea4b5ec6f9827e41583e3f0fdbb5efb (HEAD -> feature_cherrypick, origin/feature_cherrypick)
    2. Author: aiqinhai <aiqinhai@qq.com>
    3. Date: Fri Sep 22 21:20:39 2023 +0800
    4. [修改代码]cherryPick第六次

    需要把 09cc27103ea4b5ec6f9827e41583e3f0fdbb5efb 这次commit复制到另一个分支,首先把 commitHash 复制下来,然后切到 master 分支。master分支当前在cherryPick3()这个版本,使用cherry-pick把 09cc27103ea4b5ec6f9827e41583e3f0fdbb5efb commit应用到当前分支。由于feature_cherrypick分支和master分支差三个分支,在进行git cherry-pick之后出现冲突,这时候进行冲突解决即可。

    复制多个

    以上是单个 commit 的复制,下面再来看看 cherry-pick 多个 commit 要如何操作。一次转移多个提交:

    git cherry-pick commit1 commit2
    

    上面的命令将 commit1 和 commit2 两个提交应用到当前分支。多个连续的commit,也可区间复制:

    git cherry-pick commit1^..commit2
    

    上面的命令将 commit1 到 commit2 这个区间的 commit 都应用到当前分支(包含commit1、commit2),commit1 是最早的提交。比如说feature_cherrypick分支,有如下三个commit.

    1. commit 668a7ca5daabd8dedbdfdc15e9abad912adc6414
    2. Author: aiqinhai <aiqinhai@qq.com>
    3. Date: Fri Sep 22 20:52:36 2023 +0800
    4. [修改代码]cherryPick第三次
    5. commit 5b303cc62fcd3d3121619d1163f2ec3392d65b7c
    6. Author: aiqinhai <aiqinhai@qq.com>
    7. Date: Fri Sep 22 20:35:31 2023 +0800
    8. [修改代码]cherryPick第二次
    9. commit 8ffb06b413047d818f920758288491c70c4fa9e4
    10. Author: aiqinhai <aiqinhai@qq.com>
    11. Date: Fri Sep 22 20:33:55 2023 +0800
    12. [修改代码]cherryPick第一次

     我们可以一次性将cherryPick第一次至cherryPick第三次三次commit复制新分支feature_app6.6上,先切换到feature_app6.6分支上,再执行git cherry-pick 8ffb06b413047d818f920758288491c70c4fa9e4^..668a7ca5daabd8dedbdfdc15e9abad912adc6414命令,执行结果如下。

    应用成功之后,git push到远程分支即可

    cherry-pick 代码冲突

    在cherry-pick多个commit时,可能会遇到代码冲突,这时cherry-pick会停下来,让用户决定如何继续操作。我们可以解决冲突,然后使用cherry-pick --continue让cherry-pick继续进行下去。把冲突之后的commit也复制进来,整个流程就完成了。但有时候可能需要在代码冲突后,放弃或者退出流程:

    放弃 cherry-pick:
    git cherry-pick --abort
    

    回到操作前的样子,就像什么都没发生过。

    退出 cherry-pick:
    git cherry-pick --quit
    

    不回到操作前的样子。即保留已经cherry-pick成功的 commit,并退出cherry-pick流程。

  • 相关阅读:
    2022年应届毕业生就业率惨淡怎么办?不要错过多金的数据科学行业
    企业管理 - 现代管理學之父
    Jan 2023-Prioritizing Samples in Reinforcement Learning with Reducible Loss
    CF1427F-Boring Card Game【贪心】
    我用Coze给自己的服务号加了一个多功能的GPT服务机器人
    面向对象编程
    分类(二):损失函数
    多模态说话人开源项目3D-Speaker
    Java | 类、实例初始化 、方法重写规则
    PostGIS轨迹分析——AIS数据删除异常点
  • 原文地址:https://blog.csdn.net/qq_28165595/article/details/133186815