git cherry-pick 教程

AlgoStrider
• 阅读 1890

在多分支开发的时候会有需要把一个分支的部分commit应用到其他的分支上,然而git merge会把一个分支的commits都应用到当前分支,这时候我们可以使用git cherry-pick来完成这一操作,它的作用是选择已存在的commit应用到当前分支上,并产生新的commit SHA-1 校验和。

下面是这个命令的图解示例。

图解示例

如下有两个分支masterdev,从C2开始两个分支开始有不同的commits。
git cherry-pick 教程

需要把devC6合并到master,只需在master分支上执行git cherry-pick C6,就会把dev分支的C6应用到master分支上并产生一个新的commitC6'
git cherry-pick 教程

如果要合并多个commits,比如C7C8两个commits,可以执行git cherry-pick C7 C8,则git提交记录就会变成下面这样。
git cherry-pick 教程

需要注意的是,新的commit SHA-1 校验和会和原来的commit SHA-1 校验和不一样。

基本用法

下面我们来动手感受一下。先准备一下git的提交记录,示例如下图:
git cherry-pick 教程

这个时候master分支有C1,C2,C3,C4文件,dev分支有C1,C2,C5,C6,C7,C8,C9文件。
git cherry-pick 教程

接下来我们把dev分支的一些commits应用到master分支:

  • 根据之前的终端记录或者通过git log dev查看C6的 SHA-1 校验和是fca3793,在master分支上执行git cherry-pick fca3793,可以看到新增了一个 SHA-1 校验和为50982a2的commit并且在master分支上多了一个C6文件。
  • 执行git cherry-pick d67e9f6 7bf5e7d之后,master分支又多了C7,C8两个文件。

git cherry-pick 教程

其他用法

  • 如果想应用连续的多个commits还可以使用git cherry-pick commit1..commitn,应用 SHA-1 校验和从commit1commitn的commits,注意这里并不包含commit1,如果需要包含可以执行git cherry-pick commit1^..commitn
  • 如果只想把某一个分支最后一个commit应用到当前分支,可以直接使用git cherry-pick branch-name,这个命令的效果是,将branch-name分支最后一个commit应用到当前分支。
  • 当然实际使用过程中,使用cherry-pick可能会出现冲突,例如提示如下:

git cherry-pick 教程
解决冲突再执行git add <paths>将文件标记为以解决冲突,或者执行git rm <paths>直接从暂存区和工作区删除文件,最后执行git cherry-pick --continue,则完成这次cherry-pick
如果想要取消这次的cherry-pick操作可以执行git cherry-pick --abort

    • -
版权声明:如需转载,请带上本文链接、注明来源和本声明。否则将追究法律责任。https://www.immuthex.com/posts/git-cherry-pick-tutorial
点赞
收藏
评论区
推荐文章
墨冰 墨冰
4年前
最方便的git教程使用大全,让你玩转git!!!
本篇是介绍廖雪峰老师官方网站中Git教程的学习笔记我感觉可以学到很多东西,可以使你简单上手,也可以供你复习时候使用。每个开发都可以从master上克隆一个本地版本库,就算没有网络,也可以提交代码到本地仓库、查看log、创建项目分支等等每个版本库都可以创建无限个分支,分支是个完整的目录,且这个目录拥有完整的实际文件一、安装网上搜一下安装教程,这里就不介绍了安
Stella981 Stella981
3年前
Git 使用教程—以 GitLab 上的 Django 项目为例
一、代码提交流程1\.clone代码到本地有两个命令,第一个是clonemaster主分支代码,第二个是clone某个branch分支代码。团队项目开发中,我一般是clone别人分支代码进行整合,master主分支代码很少动。gitclonehttp://www.xxx.xxx.git
Stella981 Stella981
3年前
Git 深度学习填坑之旅三(分支branch、远程操作)
0x01分支branch!(https://oscimg.oschina.net/oscnet/6a1498c667d38a32d46cf72d9b9ff86fc83.png)依旧借用大表哥(@表元素)的图很多时候,我们需要建立另一条分支来进行项目的独立开发,当完成后再跟主流回合进行合并这个时候就要启用分支
Stella981 Stella981
3年前
Git常用操作
本文(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Faicode.cc%2Farticle%2F429.html)并非讲解分支管理知识,而是记录了Git分支管理的一些命令使用方法,供使用时参考。以下使用<branch\_name表示用户需要替换的内容创建分支
Stella981 Stella981
3年前
Git详解之三 Git分支(第二部分)
3.3 分支的管理到目前为止,你已经学会了如何创建、合并和删除分支。除此之外,我们还需要学习如何管理分支,在日后的常规工作中会经常用到下面介绍的管理命令。gitbranch 命令不仅仅能创建和删除分支,如果不加任何参数,它会给出当前所有分支的清单:$ git branch iss53  master 
Stella981 Stella981
3年前
GitFlow原理浅析
一、Git优点分布式存储,本地仓库包含了远程仓库的所有内容.安全性高,远程仓库文件丢失了也不怕优秀的分支模型,创建/合并分支非常的方便方便快速,由于代码本地都有存储,所以从远程拉取和分支合并时都非常快捷当分支过多时,如何管理这些分支呢?我们团队采用了GitFlow的模式
Stella981 Stella981
3年前
Git 技巧
在日常开发中,我们经常需要创建新分支,如果希望新分支仅对本人可见,则创建一个本地分支,如果希望在多个成员之间共享,则创建一个远程分支,其他成员可以通过pull或fetch命令拉取远程分支。本文主要讨论远程分支的创建方法。有两种方式可以创建一个远程分支,一是在远程仓库上直接创建,例如我们可以在GitHub或码云的Web界面上创建远程分支;二是在先创建一
住儿 住儿
2年前
Git Rebase
什么是gitrebase?gitrebase是将更改从一个分支合并到另一个分支的两个git过程之一(另一个是gitmerge)。虽然merge总是可以简单的地合并分支,但是
小万哥 小万哥
2年前
Git分支教程:详解分支创建、合并、删除等操作
Git是一种强大的分布式版本控制系统,它的分支功能使得团队协作和代码管理变得更加灵活和高效。分支可以让开发人员在不影响主线开发的情况下进行并行开发和实验性工作。本篇博客将详解Git分支的创建、合并、删除等操作,帮助你更好地理解和使用Git的分支功能。分支的
小万哥 小万哥
1年前
Git 分支管理:优化版本控制与应急处理的关键策略
使用Git分支:轻松管理不同版本和应对紧急情况的最佳实践使用Git分支在Git中,分支是主仓库的新/独立版本。假设你有一个大型项目,需要对其进行设计更新。没有使用Git时:复制所有相关文件以避免影响实时版本开始进行设计工作,并发现代码依赖于其他文件中的代码