Git:cherry-pick应用一个分支某些现有提交,到另外一个分支

简介: Git:cherry-pick应用一个分支某些现有提交,到另外一个分支

cherry-pick 能干啥?


cherry-pick 的翻译是择优挑选,使用git cherry-pick命令,可以选择将现有的一个或者多个提交的修改引入当前内容。


cherry-pick应用场景

假设你现在正在开发一个项目,有一个功能分支 feature,开发分支 develop。 feature 有3个提交,分别是 A ,B ,C 。develop 分支只想加入 C 功能, 此时合并操作无法满足,因为直接合并 feature,会将3个提交都合并上,我想合并就只有 C,不要 A,B。

此时就需要挑樱桃大法–cherry pick!


cherry-pick使用:

命令方式:

  • 切换到 develop 分支。
  • 通过 git log feature,找到 C 的 SHA1 值。
  • 通过 git cherry-pick <C的SHA1> ,将 C 的修改内容合并到当前内容分支 develop 中。
  • 若无冲突,过程就已经完成了。如果有冲突,按正常冲突解决流程即可。

 

 


Idea菜单方式

我目前的代码分支是2198,目标上线分支是2243。后面2243的代码review后会合并都hotfix分支上。

  1. 切换分支到目标分支2243上
  2. 打开Versin Control面板
  3. 在版本控制面板点开Log标签
  4. 修改分支为要cherry pick的分支
  5. 点选最后一个按钮,可以把已经合并过来的提交置灰。这一步可选
  6. 在下面选择要cherry pick的提交,按住ctrl键选多条,然后点选倒数第二个按钮进行cherry pick
  7. 接下来IDEA会依次把每一次提交弹出来让你写提交消息(使用默认的就行)。前面选了多条就会弹多次,所以不要急。
  8. 最后把提交的代码Push掉就好了。

 


cherry-pick VS merge

从上面简单的小例子上看,我想,小伙伴们,都应该已经对 merge 和 cherry-pick 有了大概的区分,这里做下对比,让大家有个清晰明确的掌握,防止似是而非,以后误操作。

  • git merge :将两个提交历史合并。
  • git cherry-pick:将提交对应的内容合并。

这里,非常需要明确的一点,commit 代表的是修改!

例中,提交 C 的内容,就是对比 B 上面做的修改,可能是创建了一个文件,或者修改了一个词语。那么 C 内容就是一个文件的添加,和一个词语的修改。

以提交 C 为结束点的提交历史,实际内容是提交 C 和 C 之前所有的修改。

  • cherry-pick 操作的对象就是 commit。
  • merge 操作的对象就是 commit history。

所以,使用的时候,你要知道,你想要的什么。


cherry-pick其他命令

git cherry-pick <commits>

挑选多个提交合并,提交之间用空格相隔。

例如,git cherry-pick 4d2951 e4cdff9


git cherry-pick <start-commit>..<end-commit>

挑选一个范围的多个提交合并,但是这个语法对应操作区别是左开右闭,不包含start-commit。另外要注意两个commit 之间要求有连续关系的,并且前者要在后者之前,顺序不能颠倒。


git cherry-pick <start-commit>^..<end-commit>

这个和git cherry-pick <start-commit>..<end-commit>一样,区别就是加了一个^符号,就变成闭区间了,包含 start-commit。


git cherry-pick <branch name>

挑选 branch 最顶端的提交


git cherry-pick --continue

继续下个操作


git cherry-pick --quit

退出


git cherry-pick --abort

停止本次操作

以上是关于 cherry-pick 操作控制命令,当 cherry-pick 多个提交时,假设遇到冲突,--continue继续进行下个,--quit结束 cherry-pick 操作,但是不会影响冲突之前多个提交中已经成功的,--abort直接打回原形,回到 cherry-pick 前的状态,包括多个提交中已经成功的。

参考文章:https://blog.csdn.net/qq_32452623/article/details/79449534 



目录
相关文章
|
28天前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
97 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
1月前
|
开发工具 git 开发者
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
本文通过具体操作和截图,详细讲解了如何在Git中解决分支冲突问题,包括如何识别冲突、手动解决冲突代码、提交合并后的代码,以及推送到远程分支。
255 3
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
|
2月前
|
缓存 开发工具 git
Git创建分支以及合并分支
在Git中,创建分支使用`git branch [branch_name]`,切换分支使用`git checkout [branch_name]`。修改文件后,通过`git add [file]`添加到暂存区,然后`git commit`提交到本地仓库。如果是新建分支的第一次推送,使用`git push origin [branch_name]`推送到远程仓库,之后可以简化为`git push`。合并分支时,使用`git merge [branch_name]`将指定分支的更改合并到当前分支。
52 2
Git创建分支以及合并分支
|
29天前
|
开发工具 git
Git分支使用总结
Git分支使用总结
32 1
|
2月前
|
存储 Linux 开发工具
Git基础命令,分支,标签的使用【快速入门Git】
本文详细介绍了Git版本控制系统的基础概念和常用命令,包括工作区、暂存区和版本库的区别,文件状态的变化,以及如何进行文件的添加、提交、查看状态、重命名、删除、查看提交历史、远程仓库操作和分支管理,还涉及了Git标签的创建和删除,旨在帮助读者快速入门Git。
Git基础命令,分支,标签的使用【快速入门Git】
|
6月前
|
JSON 开发工具 git
git rebase 合并当前分支的多个commit记录
git rebase 合并当前分支的多个commit记录
121 1
|
开发工具 git
git 操作之合并其它分支的某次提交(commits)到当前分支
git cherry-pick合并其它分支的某次提交(commits)到当前分支
325 0
|
开发工具 git
【Git】一文带你入门Git分布式版本控制系统(创建合并分支、解决冲突)
【Git】一文带你入门Git分布式版本控制系统(创建合并分支、解决冲突)
129 0
【Git】一文带你入门Git分布式版本控制系统(创建合并分支、解决冲突)
|
数据可视化 Go 开发工具
cggit 简化 Git 提交、合并、分支偏移小神器,提升开发、修BUG效率!
cggit 简化 Git 提交、合并、分支偏移小神器,提升开发、修BUG效率!
350 0
|
开发工具 git
GIT合并分支的三种方法
GIT合并分支的三种方法
1891 0