文章目录
首页
Javascript
Html
Css
Node.js
Electron
移动开发
工具类
服务端
浏览器相关
前端收藏
其他

git cherry-pick使用指南

2018年12月28日 发布 阅读(350) 作者:懒炖

原文: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 国际 许可协议,如需转载,请注明出处

评论

  •  
  • svn转git,文件hash值不同电脑不一样

    项目从svn迁到git了,遇到的一个坑:前端工程化打包,会给每个js\css\img文件名添加一个hash值,svn下这个一点问题没有,迁到git后,hash值在不同的电脑上总是不一样。那是什么原因呢?也许你还会发现,有些本来没有修改过的文件,在&quot;git status&quot;时也提示有修改,需要提交。

    发布:2019-06-12 阅读(61)

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

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

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

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

    linux下,设置git免密码操作

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

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

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

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

  • git bisect 命令教程

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

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

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

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

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

  • .gitignore文件配置不生效

    .gitignore文件配置不生效

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

  • git修改当前项目用户

    git修改当前项目用户

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

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

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

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

  • git查看某个文件的修改记录

    git查看某个文件的修改记录

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