• TortoiseGit 入门指南13:拣选


    对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。

    这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用 合并merge)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 拣选(Cherry pick)。

    通俗的讲 拣选 直接把某一次 提交 (commit)拿过来,作为最新一次提交,就像是直接摘了一颗樱桃加在链表最前面,所以叫Cherry pick (拣选)。

    如果你感兴趣,可以从 Git 的底层来了解下拣选,如果不感兴趣,可以忽略这些内容。

    git cherry-pick <commitHash>
    
    • 1

    该命令将指定的提交 commitHash 应用于当前分支。这会在当前分支产生一个新的提交,当然它们的哈希值会不一样。

    举例来说,代码仓库有 masterfeature 两个分支。

    a - b - c - d   Master
     \
         e - f - g  Feature
    
    • 1
    • 2
    • 3

    现在将提交 f 应用到 master 分支。

    # 切换到 master 分支
    $ git checkout master
    
    # 拣选 操作
    $ git cherry-pick f
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上面的操作完成以后,代码库就变成了下面的样子。

    a - b - c - d - f   Master
     \
         e - f - g      Feature
    
    • 1
    • 2
    • 3

    从上面可以看到,master分支的末尾增加了一个提交 f

    git cherry-pick 命令的参数,不一定是提交的哈希值,分支名也是可以的,表示转移该分支的最新提交。

    $ git cherry-pick feature
    
    • 1

    上面代码表示将 feature 分支的最近一次提交,转移到当前分支。

    拣选的一般步骤

    test-合并指定提交 分支中的某个提交应用到 master 分支的步骤如下:

    1. 切换到 master 分支:鼠标右键 -Tortoise Git - Switch/Checkout...,选择 master 分支。

    2. 打开 提交日志对话框,切换到 test-合并指定提交 分支,选中要 拣选 的某个提交或多个提交,然后右击鼠标弹出右键菜单,选择 Cherry Pick this commit...(选中一个提交)或 Cherry Pick select commits...(选中多个提交)。

    在这里插入图片描述

    1. 这里选中 分支提交2,右击鼠标弹出右键菜单,选择 Cherry Pick this commit... 弹出 拣选 对话框。

    在这里插入图片描述

    拣选对话框与变基(Rebase)对话框很像。顶部窗口中每行显示一个选中的要 cherry-pick 的提交。顶部窗口下面的按钮控制操作,比如选取(Pick)提交、编辑、跳过等,还可以选择多个提交的顺序。

    选中一行提交后,在底部窗口将显示受影响的文件。

    1. 选中要拣选的提交,单击 Continue 按钮。
    2. 如果没有冲突,在弹出的界面中按下 Done 按钮完成 拣选 操作。

    注意:拣选可能产生合并冲突,在下面的 处理拣选冲突 中介绍如何解决冲突。

    处理拣选冲突

    1.在 拣选的一般步骤 一节中,最后的合并可能会有冲突。如果有冲突,在 Cherry Pick 对话框的底部窗口中会显示出冲突的文件:

    在这里插入图片描述

    1. TortoiseGit会使用特定的图标标示出冲突的文件:

      在这里插入图片描述

    2. 选中冲突文件,在右键菜单中选择 TortoiseGit - Edit Conflicts 启动外部合并工具/冲突编辑器手动解决冲突。

    在这里插入图片描述
    这里 CHERRY_PICK_HEAD(77c84bf9) 是我们要合并的源文件,与 Base 文件相比较可以看出新增加了一个内容为 “分支提交5” 的提交,这个提交是我们要拣选到主分支( HEAD 指向的文件)的提交。
    4. 手动编辑冲突,需要把 “分支提交5” 内容拷贝到主分支(HEAD指向的文件),然后保存:

    在这里插入图片描述
    5. 手动修改冲突文件后,执行 TortoiseGit - Resolve... 菜单项,在弹出的对话框中点击 OK按钮,将刚刚修改的冲突文件标记为 冲突已解决(resolve)
    在这里插入图片描述
    7. 标记为冲突已解决后,TortoiseGit弹出下一步操作界面。正常的合并冲突流程需要做一次提交,填写本次冲突解决的信息,但我们这里是拣选合并,并不需要手动做一次提交,所以这里点击OK按钮,而不要点Commit...按钮!(这是与普通合并冲击解决流程的唯一区别)。

    在这里插入图片描述
    8. 回到拣选对话框,在底部窗口按下 F5 快捷键刷新显示内容,可以看到文件已经不是冲突状态。这时按下 Commit 按钮,让 TortoiseGit 自动做一次提交。注意这次提交并不需要你填写什么信息,TortoiseGit 会把拣选的提交信息搬运到这次提交中。

    在这里插入图片描述
    8. 自动完成一次提交后,按下 Done 按钮完成 拣选 操作。

    在这里插入图片描述









    读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)
    千金难买知识,但可以买好多奶粉

  • 相关阅读:
    java基于微信小程序校园二手闲置商品交易跳蚤市场 uniapp 小程序
    计算机网络相关知识点
    【Java虚拟机】万字长文,搞定JVM方方面面!
    C11线程池详解
    【java核心技术】Java知识总结 -- 对象和类
    PDF头部报错:Evaluation Warning : The document was created with Spire.PDF for Java.
    深圳xxx公司测试岗位企业面试题
    MySQ漏洞修复
    无人机还能“独立思考”,他们做到了...
    LLM面面观之LLM复读机问题及解决方案
  • 原文地址:https://blog.csdn.net/zhzht19861011/article/details/131817127