git cherry-pick 最简单的使用

使用场景:
对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。
这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。

  • git cherry-pick命令的作用,就是将指定的提交(commit)应用于其他分支。

转移单个提交

举例:有两个特性分支 需要把 FeatureTwo 里面的 名为 f 的commit (提交改动的代码) 追加到FeatureOne (FeatureOne也想要这个修改的代码)

 a - b - c - d  FeatureOne
         \
           e - f - g FeatureTwo

做法:

$ git checkout FeatureOne
$ git cherry-pick <commitHash> //FeatureTwo提交的commit Hash值
$ git add .
$ git push origin FeatureOne

注意:

命令二:上面的命令会将指定的提交commitHash,应用于当前分支。这会在当前分支产生一个新的提交,当然它们的哈希值会不一样。

命令三四:因为拉取到commit只是把代码更新到本地,并没有上传到远程。所以要push 上传到远程 这里不需要commit 因为没有代码的改变 commit会失败

这时候 FeatureOne远程的代码就会被更新 如下:

a - b - c - d - f  FeatureOne
         \
           e - f - g FeatureTwo

转移多个提交

操作过程和单个提交一样

在 cherry-pick 后面 用法不同

$ git cherry-pick <HashA> <HashB>  //列举commitHash值 
//$ git cherry-pick   ABDC   KIJHNBGH   不用加<><>
$ git cherry-pick A..B   //A到B所有的提交
注意:它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。
**** 这个命令不会包含提交A
$ git cherry-pick A^..B 
**** 包含提交A的连续提交方法

代码冲突

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

--continue

用户解决代码冲突后,第一步将修改的文件重新加入暂存区(git add .),第二步使用下面的命令,让 Cherry pick 过程继续执行。

$ git cherry-pick --continue

--abort

发生代码冲突后,放弃合并,回到操作前的样子。

$ git cherry-pick --abort

--quit

发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子。

$ git cherry-pick --quit
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容