1、使用方法及其作用

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

  就是对已经存在的commit 进行 再次提交;

使用方法如下:

git cherry-pick <commit id>

查询commit id 的查询可以使用git log查询(查询版本的历史),最简单的语法如下:

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 id

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

2、实践

  首先切换到你要添加commit的分支,如:你要将A分支上面的commit添加到B分支上面,我们可以要先切换到B分支上面。(注意:cherry-pick是一个本地的操作,假如你pull代码之后有人在A分支上有了新的commit,需要你先pull代码在进行cherry-pick,原因及其错误提示请见最后)。

git checkout B

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

git cherry-pick 0771a0c107dbf4c  #将上面的commit id为0771a0c107dbf4c96806d22bbc6ef4c58dfe7075的提交添加到B分支上面

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。

转载于:https://www.cnblogs.com/fnlingnzb-learner/p/9804063.html

git cherry-pick合并某个commit相关推荐

  1. git cherry pick

    直接将选定的其他分支的commit,提交到该分支上 不建议使用 git rebase --onto 使用cherry pick代替 http://weblog.avp-ptr.de/20120928/ ...

  2. IDEA git cherry pick 简单使用

    cherry pick的作用: 参考了一些博客, eg: 参考博客1 参考博客2 再做了个小案例后,我目前的理解是,cherry pick的作用是将一个分支的部分提交/历史提交,可以合并到另外一个分支 ...

  3. 【git cherry pick冲突】

    修好了bug愉快的打算commit提交的时候 看到提示语句是can not commit changes due to unresolved conflicts 在Android Studio中寻找图 ...

  4. idea cherry pick 功能 git log 窗口 冲突conflict

    git log 窗口 参考 source tree cherry pick, merge conflict merge conflict 冲突 <<<<<<< ...

  5. git分支合并、撤销;git修改已push的commit信息; git 撤销操作;

    git分支合并 1.分支代码提交 2.git branch 查询本地分支 3.git checkout 分支名1 切换分支到需要合并的分支上 4.git merge 分支名2  //选择要合并到 分支 ...

  6. GIT合并特定commit

    Git合并特定commits 到另一个分支 标签: gitmerge合并特定commit单个commit 2014-12-25 14:13 21570人阅读 评论(4) 收藏 举报 分类: Git(1 ...

  7. c++两个vector合并_这才是真正的 Git:分支合并

    公众号关注 "GitHubDaily"设为 "星标",每天带你逛 GitHub! 本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件 ...

  8. git 修改已提交的 commit

    2019独角兽企业重金招聘Python工程师标准>>> 修改历史的操作,原理上都是通过变基(rebase)实现的. 因为发生了修改,则每个涉及的 commit 都会计算出新的 SHA ...

  9. 1.Cherry Pick与Create Patch的区别

    Cherry Pick与Create Patch的区别 结论 实验 场景1:应用时无冲突 场景2: 应用时产生冲突 使用cherry pick 使用patch 场景3:产生冲突,并且有其他文件的变更 ...

  10. git mr 怎样合并部分_系统掌握Git之—分离头指针与合并操作

    分离头指针 分离头指针表示我们在工作在没用分支的情况下,我们通过git log 打印日志,选择中间的一个commitId,然后进行checkout操作,git checkout 82fdac4baac ...

最新文章

  1. Android 利用方向传感器获得手机的相对角度
  2. linux 批量替换所有文件中包含的字符串
  3. 庞锋 OpenCV 视频 学习进度备忘
  4. 搭建解析内网 linux_Linux 搭建ngrok内网穿透
  5. SWT的UI线程和非UI线程
  6. 使用logdashboard进行可视化的日志追踪
  7. pyinstaller安装失败解决
  8. 想学 Python?那这套教程再适合你不过了!!
  9. ZZULIOJ 1052:数列求和4
  10. java就业班学什么呀_传智播客JAVA就业班学习心得
  11. apache virtualhost 访问不了_六星教育:你为什么当不了架构师?除技术,你还需具备这些能力...
  12. 龙虎斗 详解(C++)
  13. ios 获取最后一个cell_ios – UICollectionView estimatedItemSize – 最后一个单元格未对齐...
  14. YOLOv4原文翻译 - v4它终于来了!
  15. NBIOT透传模块在智能公寓锁上的使用2
  16. Android 適配器的回調
  17. 伪概念催生人工智能行业泡沫 2018年或迎大洗牌
  18. selenium八大元素定位方法
  19. 搭建nlp_server服务器
  20. 100种活动促销方案

热门文章

  1. 提防最近一些公司的小九九!
  2. ssh java_java中的SSH的各自作用是什么-百度经验
  3. Ubuntu 网速显示,ssh配置
  4. 【luogu T34117 打油门】 题解
  5. Codeforces 988D Points and Powers of Two ( 思维 || 二的幂特点 )
  6. Js判断当前浏览者的操作系统
  7. asp.net membership 配置错误
  8. BZOJ 1715: [Usaco2006 Dec]Wormholes 虫洞 DFS版SPFA判负环
  9. SpringData JPA整理
  10. 【winfrom】Excel文件加载