首页
Javascript
Html
Css
Node.js
Electron
移动开发
小程序
工具类
服务端
浏览器相关
前端收藏
其他
关于
公司注册

git cherry-pick使用指南

2018年12月28日 发布 阅读(3135) 作者:Jerman

原文:https://www.jianshu.com/p/08c3f1804b36


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

简单用法

  1. git cherry-pick <commit id>

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

例如:

  1. $ git checkout v2.0分支
  2. $ git cherry-pick 38361a55 # 这个 38361a55 号码,位于v3.0分支中:
  3. > $ git log
  4. > commit 38361a55138140827b31b72f8bbfd88b3705d77a
  5. > Author: Justin [Justin@xxx.com](https://link.jianshu.com?t=mailto:Justin@xxx.com)
  6. > Date: Sat Dec 10 00:11:44 2016 +0800

1. 如果顺利,就会正常提交。结果:

  1. > Finished one cherry-pick.
  2. > On branch v2.0分支
  3. > Your branch is ahead of 'origin/old_cc' by 3 commits.

2. 如果在cherry-pick 的过程中出现了冲突

  1. > Automatic cherry-pick failed.
  2. > After resolving the conflicts,mark the corrected paths with 'git add <paths>' or 'git rm <paths>'and commit the result with:
  3. > git commit -c 15a2b6c61927e5aed6111de89ad9dafba939a90b
  4. > **或者:**
  5. > error: could not apply 0549563... dev
  6. > hint: after resolving the conflicts, mark the corrected paths
  7. > hint: with 'git add <paths>' or 'git rm <paths>'
  8. > hint: and commit the result with 'git commit'

就跟普通的冲突一样,手工解决:

2.1 $ git status # 看哪些文件出现冲突

both modified: app/models/MainActivity.java

2.2 $ vim app/models/MainActivity.java # 手动解决它。

2.3 $ git add app/models/MainActivity.java

2.4 git commit -c <新的commit号码>

2.5 再次cherry-pick剩余commit

若提示:

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

则执行对应操作:

  1. > _git cherry-pick_ --continue
  2. > _git cherry-pick_ --quit
  3. > _git cherry-pick_ --abort

命令集合:

  • git cherry-pick:单独合并一个提交
  • git cherry-pick -x:同上,不同点:保留原提交者信息。
    Git从1.7.2版本开始支持批量cherry-pick,就是一次可以cherry-pick一个区间的commit。
  • git cherry-pick..
  • git cherry-pick^..

前者表示把之间(左开右闭,不包含start-commit-id)的提交cherry-pick到当前分支;
后者有”^”标志的表示把之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。
其中,只需要commit-id的前6位即可,并且在时间上必须早于
注:以上合并,需要手动push代码。

版权声明:本站文章除特别声明外,均采用署名-非商业性使用-禁止演绎 4.0 国际 许可协议,如需转载,请注明出处
  • Unable to negotiate with 106.52.160.162 port 22: no matching host key type found. Their offer: ssh-rsa fatal: Could not read from remote repository.

    Unable to negotiate with 106.52.160.162 port 22: no matching host key type found. Their offer: ssh-rsa fatal: Could not read from remote repository.

    发布:2021-11-09 阅读(4387)

  • 使用git hooks(post-receive)实现简单的远程自动部署

    使用git hooks(post-receive)实现简单的远程自动部署

    发布:2019-06-05 阅读(5513)

  • linux下设置git(pull,push等)免密码操作

    linux下,设置git免密码操作

    发布:2019-06-04 阅读(3061)

  • git cherry-pick使用指南

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

    发布:2018-12-28 阅读(3135)

  • 找回Git中丢失的Commit(git如何撤消reset操作)

    在使用Git的过程中,有时候会因为一些误操作,比如reset、rebase、merge等。特别是在Commit之后又执行了`git reset --hard HEAD`强制回滚本地记录以及文件到服务器版本,导致本地做的修改全部恢复到Git当前分支的服务器版本,同时自己的Commmit记录也消失了。碰到这种情况,不要慌,我们在Git上做的任何操作都只是在原来之前的操作上做修改,并且会被记录下来保存,也就是说无论你做了什么,对于Git来说都可以进行回滚操作。

    发布:2018-12-28 阅读(2581)

  • git bisect 命令教程

    它的原理很简单,就是将代码提交的历史,按照两分法不断缩小定位。所谓&amp;quot;两分法&amp;quot;,就是将代码历史一分为二,确定问题出在前半部分,还是后半部分,不断执行这个过程,直到范围缩小到某一次代码提交。

    发布:2018-12-27 阅读(2285)

  • git输入不显示,只有光标在闪的问题

    当在git操作log,如`git log`后,然后非正常退出,即使用`CTRL+C`退出,这个时候git输入命令就不会显示了,只有光标,这时怎么办?

    发布:2018-12-26 阅读(3873)

  • .gitignore文件配置不生效

    .gitignore文件配置不生效

    发布:2018-12-24 阅读(3728)

  • git修改当前项目用户

    git修改当前项目用户

    发布:2018-12-11 阅读(2196)

  • Git修改最近一次已经提交了的commit及push

    Git修改最近一次已经提交了的commit及push

    发布:2018-12-11 阅读(1838)

  • git常用命令

    git常用命令,git查看某个文件的修改记录,分支备注

    发布:2018-11-30 阅读(2938)

  • Git 分支 - 分支的新建与合并

    发布:2018-11-27

  • git diff忽略某些文件,不比较

    通过设置git-diff driver,结合.gitattributes文件,使git diff命令忽略某些目录。例如我们只希望看到比较src目录,不希望看到比较dist目录

    发布:2018-10-26 阅读(6407)

  • git教程(写的比较详细,适合初学者,值得阅读)

    学习这本书的目的是让你了解版本控制,并且尽可能快速简单的掌握 Git。但是和另外一些关于介绍版本控制的图书不一样,阅读这本书并不需要你有很专业的 IT 或者电脑背景知识,它也面向那些编程的初学者,软件构架师,或者是项目经理。在技术方面你也不需要有很多专业知识,我们会以循序渐进的方式帮助你来理解版本控制和掌握 Git。

    发布:2018-10-19 来源:git-tower.com

  • git打包成tar\zip文件

    git如何打包增量文件?

    发布:2018-05-30 阅读(5891)

  • github push免密码

    github push时免密码

    发布:2015-01-05 阅读(1774)