git cherry-pick

介绍

git cherry-pick 可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支,叫prd,另外还有个开发版本的分支dev,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个dev中的功能到prd中,这里就可以使用cherry-pick了,其实也就是对已经存在的commit 进行再次提交。

这个流程也适用于hotfix流程, 比如在prd分支上提交个bugfix,需要提交到dev分支。

用法

git cherry-pick <commit id>

注意:当执行完 cherry-pick 以后,将会生成一个新的提交;这个新的提交的哈希值和原来的不同,但标识名一样;

示例

把prd上的某个commit合并到dev。

  1. 找到某次提交到prd分支的的commit id - 29259ee, 执行如下命令
$ git checkout dev
$ git cherry-pick 29259ee   ## 这个 29259ee,位于prd分支中
  1. 接下来正常commit, 如果有冲突就手工解决。

若提示:

error: a cherry-pick or revert is already in progress
hint: try "git cherry-pick (--continue | --quit | --abort)"
fatal: cherry-pick failed

则执行对应操作:

git cherry-pick --continue
git cherry-pick --quit
git cherry-pick --abort

命令集合

git cherry-pick <commit id>:单独合并一个提交
git cherry-pick -x <commit id>:同上,不同点:保留原提交者信息。
Git从1.7.2版本开始支持批量cherry-pick,就是一次可以cherry-pick一个区间的commit。
git cherry-pick <start-commit-id>..<end-commit-id>
git cherry-pick <start-commit-id>^..<end-commit-id>
前者表示把<start-commit-id>到<end-commit-id>之间(左开右闭,不包含start-commit-id)的提交cherry-pick到当前分支;
后者有"^"标志的表示把<start-commit-id>到<end-commit-id>之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。
其中,<start-commit-id>到<end-commit-id>只需要commit-id的前6位即可,并且<start-commit-id>在时间上必须早于<end-commit-id>
注:以上合并,需要手动push代码。

参考

链接:https://www.jianshu.com/p/08c3f1804b36

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

推荐阅读更多精彩内容

  • git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定...
    _Justin阅读 173,010评论 7 88
  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,667评论 1 26
  • 打开微信对话框 想对无话不说的朋友打三个字:好!无!聊! 打完我又删除了 因为有人总是告诉我:人生终究是一个人的人...
    咩的口水地阅读 1,193评论 0 0