设为首页 收藏本站
查看: 627|回复: 0

[经验分享] git cherry-pick合并某个commit

[复制链接]

尚未签到

发表于 2018-1-14 19:58:29 | 显示全部楼层 |阅读模式
  1、使用方法及其作用
  git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作(操作的对象是commit)。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了。
  就是对已经存在的commit 进行 再次提交;
  使用方法如下:
  

git cherry-pick <commit>  


  查询commit>  

git log   

  详细的git log 语法如下:
  git log [<options>] [<since>..<until>] [[--] <path>...]
  主要参数选项如下:
  -p:按补丁显示每个更新间的差异
  --stat:显示每次更新的修改文件的统计信息
  --shortstat:只显示--stat中最后的行数添加修改删除统计
  --name-only:尽在已修改的提交信息后显示文件清单
  --name-status:显示新增、修改和删除的文件清单
  --abbrev-commit:仅显示SHA-1的前几个字符,而非所有的40个字符
  --relative-date:使用较短的相对时间显示(例如:"two weeks ago")
  --graph:显示ASCII图形表示的分支合并历史
  --pretty:使用其他格式显示历史提交信息
  结果大概如下:
  

commit 0771a0c107dbf4c96806d22bbc6ef4c58dfe7075  
Author: zhengcanrui
<zhengcanrui@cvte.com>  
Date:   Mon Aug
8 14:41:54 2016 +0800  

  
[modify] [what] commit的备注信息
  


  其中0771a0c107dbf4c96806d22bbc6ef4c58dfe7075就是我们的commit>  注意:当执行完 cherry-pick 以后,将会 生成一个新的提交;这个新的提交的哈希值和原来的不同,但标识名 一样;(commit>
  2、实践
  首先切换到你要添加commit的分支,如:你要将A分支上面的commit添加到B分支上面,我们可以要先切换到B分支上面。(注意:cherry-pick是一个本地的操作,假如你pull代码之后有人在A分支上有了新的commit,需要你先pull代码在进行cherry-pick,原因及其错误提示请见最后)。
  

git checkout B  

  将0771a0c107dbf4c96806d22bbc6ef4c58dfe7075这个commit(提交)合并到B分支上面。正常情况下,可以给出全部的commit>前面
的一段,只要你提交中没有这一段重复的就好,剩下的部分git会帮你填充。
  

git cherry-pick 0771a0c107dbf4c  #将上面的commit>  

  1.成功的情况
  顺利的话,出现下面的情况证明你已经成功了
  

Finished one cherry-pick.  
# On branch B
  
# Your branch is ahead of
'origin/B' by 1 commits.   

  2.有冲突的情况
  下面是有文件冲突,和15a2b6c61927e5aed6718de89ad9dafba939a90b这个提交冲突
  

Automatic cherry-pick failed.  After resolving the conflicts,  
mark the corrected paths with
'git add <paths>' or 'git rm <paths>'  
and commit the result with:
  

  
git commit
-c 15a2b6c61927e5aed6718de89ad9dafba939a90b  

  解决的冲突的方法也和普通的一样,手工检查。
  1)查看冲突的文件
  使用git status
  

both modified:      app/models/user.rb  

  2)打开上面的那个文件,解决冲突。 执行add命令、执行commit命令,最后在提交即可了
  3、遇到的一些错误
  使用下面cherry-pick命令执行某个commit (编号为:77c6905dcf7f946cff594a69a33d12e22bedfae4)
  

git cherry-pick 77c6905dcf7f946cff594a69a33d12e22bedfae4  

  出现了如下的错误:
  

fatal: bad object 77c6905dcf7f946cff594a69a33d12e22bedfae4  

  场景及出现错误的原因:
  我的情况是在B分支的同步A分支的一个commit,出现了如标题的错误。我是直接在web上看到A分支新提交的这个commit,然后我直接在本地的B分支中进行git cherry-pick xxx。就出现了这个问题。经过尝试问题是出在了我没有切到B分支pull一下。总结过来就是git cherry-pick是本地特性,本地要有这个commit才可以被git cherry-pick。
  致谢:感谢您的阅读!有错误请加以纠正,有其他欠缺的东西请不吝赐教,谢谢!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-435111-1-1.html 上篇帖子: Git-学习笔记(常用命令集合) 下篇帖子: 关于git配合tortoiseGit的基础使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表