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 中。
    • 若无冲突,过程就已经完成了。如果有冲突,按正常冲突解决流程即可。

    20190418093258385.png

    image.gif

    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掉就好了。


      image.gif20190418093747792.png

      cherry-pick VS merge

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


      image.gif20190418093415738.png

      20190418093428540.png


      image.gif

        • 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 前的状态,包括多个提交中已经成功的。

           

           

          相关文章
          |
          7月前
          |
          存储 安全 开发工具
          深度解决 Git “fatal: refusing to merge unrelated histories” 错误解析什么是历史分支优雅草卓伊凡
          深度解决 Git “fatal: refusing to merge unrelated histories” 错误解析什么是历史分支优雅草卓伊凡
          629 4
          深度解决 Git “fatal: refusing to merge unrelated histories” 错误解析什么是历史分支优雅草卓伊凡
          |
          4月前
          |
          开发工具 git
          Git版本控制工具合并分支merge命令操作流程
          通过以上步聚焦于技术性和操作层面指南(guidance), 可以有效管理项目版本控制(version control), 并促进团队协作(collaboration).
          678 15
          |
          12月前
          |
          开发工具 git
          图解Git——分支的新建与合并《Pro Git》
          在Git开发中,新建与合并分支是常见的操作。以实际开发为例:为实现新需求创建分支`iss53`进行开发;遇紧急Bug时,切换至线上分支创建`hotfix`修复并合并回线上分支,再切换回`iss53`继续工作。完成`iss53`后,切换到`master`合并。若出现冲突,使用`git status`查看,手动编辑解决冲突后标记为已解决并提交。图形化工具如`git mergetool`也可辅助解决冲突。
          270 9
          |
          12月前
          |
          开发工具 git 开发者
          图解Git——分支简介《Pro Git》
          Git 分支是其核心特性之一,允许开发者从主开发线分离工作,避免干扰主线。传统版本控制系统创建分支效率低,而Git的分支创建和切换非常轻量高效。
          647 9
          |
          11月前
          |
          开发工具 git 开发者
          vscode+git解决远程分支合并冲突
          通过这些详细步骤,您可以掌握如何使用VSCode和Git高效地解决远程分支合并冲突,提高开发效率和代码质量。希望这些内容对您的学习和工作有所帮助。
          2638 86
          |
          12月前
          |
          存储 项目管理 开发工具
          图解Git——分支开发工作流《Pro Git》
          分支开发工作流利用Git的分支功能,支持灵活的项目管理。长期分支如`master`和`develop`分别保存稳定和开发中的代码;短期主题分支用于开发单一特性或修复问题,完成后合并到主分支。此模式确保代码稳定性,支持并行开发、便于审查和灵活调整。建议维护明确的长期分支,保持主题分支短小精悍,并定期清理无用分支。配置上可保护关键分支,遵循命名规范。
          481 7
          |
          12月前
          |
          存储 缓存 Java
          图解Git——远程分支《Pro Git》
          远程分支是 Git 中用于管理分布式协作的关键概念。远程引用指向远程仓库中的分支和标签,常用 `git ls-remote` 或 `git remote show` 查看。日常开发中,通常使用远程跟踪分支(如 `origin/main`)与远程分支交互,简化远程仓库状态的管理和使用。远程跟踪分支记录远程分支的状态,但本身只读。
          291 6
          |
          开发工具 git
          git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
          这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
          342 1
          git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
          |
          开发工具 git 开发者
          关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
          本文通过具体操作和截图,详细讲解了如何在Git中解决分支冲突问题,包括如何识别冲突、手动解决冲突代码、提交合并后的代码,以及推送到远程分支。
          3749 3
          关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
          |
          开发工具 git
          Git分支使用总结
          Git分支使用总结
          189 1