当前位置: 首页 > news >正文

git cherry pick怎么用

git cherry-pick 是 Git 中一个非常实用的命令,用于将其他分支上的单个或多个特定提交,选择性地应用到当前分支。它的核心作用是“挑拣”提交,而不是合并整个分支,适合需要在不同分支间复用特定功能或修复的场景。

基本用法步骤

1. 确保当前分支正确

先切换到需要应用提交的目标分支(比如你想把提交应用到 main 分支,就先切到 main):

git checkout 目标分支名  # 例如:git checkout main
2. 获取需要“挑拣”的提交哈希值

需要先找到要复制的提交的哈希值(commit hash)。切换到源分支(提交所在的分支),用 git log 查看:

git checkout 源分支名  # 例如:git checkout feature
git log --oneline  # 查看简洁的提交记录,获取目标提交的哈希值(前7位即可)

示例输出(哈希值如 a1b2c3d):

a1b2c3d (feature) 修复登录按钮样式问题
e4f5g6h 添加用户头像上传功能
...
3. 执行 cherry-pick 命令

切换回目标分支,执行以下命令应用指定提交:

git checkout 目标分支名  # 回到目标分支,例如 main
git cherry-pick <提交哈希值>  # 例如:git cherry-pick a1b2c3d

如果成功,该提交的修改会被应用到当前分支,并自动创建一个新提交(提交信息与原提交相同)。

常见场景与进阶用法

1. 一次挑拣多个提交

可以同时指定多个提交的哈希值(按顺序应用):

git cherry-pick 哈希1 哈希2 哈希3

也可以挑拣一个范围的提交(左开右闭,即不包含 哈希A,包含 哈希B):

git cherry-pick 哈希A..哈希B  # 应用 哈希A之后、哈希B及之前的所有提交
2. 处理冲突

如果挑拣时遇到冲突(两个分支对同一部分代码有不同修改),Git 会提示冲突文件,此时需要:

  1. 手动打开冲突文件,修改并解决冲突(保留需要的代码)。
  2. 标记为已解决:git add <冲突文件>
  3. 继续完成 cherry-pick:git cherry-pick --continue

如果想放弃本次挑拣,执行:git cherry-pick --abort

3. 常用参数
  • -n--no-commit:只应用提交的修改,不自动创建新提交(方便合并多个修改后手动提交)。

    git cherry-pick -n 哈希值  # 应用修改但不提交
    # 修改完成后手动提交:git commit -m "合并xxx提交的修改"
    
  • -x:在新提交的信息末尾添加原提交的哈希值(方便追踪来源),例如:

    git cherry-pick -x a1b2c3d
    # 提交信息会自动加上:(cherry picked from commit a1b2c3d)
    

适用场景举例

  • 场景1:feature 分支上有一个紧急修复,需要先同步到 main 分支,但 feature 其他功能还未完成,不能合并整个分支。
  • 场景2:同一修复需要应用到多个版本分支(如 v1.0v2.0),避免重复开发。

注意事项

  • 挑拣提交后,新提交与原提交是不同的(哈希值不同),只是内容相同。
  • 尽量避免挑拣“合并提交”(merge commit),可能导致复杂冲突。
  • 操作前确保当前分支工作区干净(可通过 git status 检查),避免干扰。

通过 git cherry-pick,可以灵活地在分支间复用代码,是 Git 中高效协作的重要工具。

http://www.dtcms.com/a/391128.html

相关文章:

  • 40岁从智驾转具身智能之路
  • 串口连接失败排坑步骤
  • QML学习笔记(三)QML基础语法其一:Rectangle及帮助文档的使用
  • 工业相机与镜头靶面尺寸的关系:从原理到选型的避坑指南
  • javaweb tomcat的使用
  • AI 赋能 APP 界面设计公司:从美学到交互的智能升级
  • Java 中的 static:从动机到内存模型、并发与最佳实践
  • 【数据结构与算法(C语言版)】从 0 实现 线性表之顺序表(代码实现增删查功能全解析)
  • MethodSignature signature = (MethodSignature) joinPoint.getSignature()
  • CN2香港服务器是否适合SEO优化?
  • 查看电脑IP地址、修改IP操作,查询本地网络使用的公网IP,判断路由器是否有公网IP,内网IP又怎么让外网上访问
  • 合成孔径雷达干涉测量InSAR:从星载与地基系统原理到多领域应用实战,涵盖数据处理、地形三维重建、形变监测与案例解析
  • Activity 之间跳转时,生命周期的变化
  • SortableItem拖拽组件里的Popconfirm失效
  • [吾爱原创] 图片尺寸调整-支持批量、多格式、缩小、放大、保留元数据、无损质量、最小体积、预览
  • 【C语言】C 语言文件操作全解析:从基础到进阶
  • 《工作流落地篇:工作流中涉及到的主要数据库表》
  • 实验二理解 Java 语言的基本结构和程序设计方法
  • 【开题答辩全过程】以 基于Java的社区医疗预约系统的设计与实现为例,包含答辩的问题和答案
  • 以虚筑实,虚拟仿真技术浇筑水利工程人才培养的数字基座
  • 拟声 0.79.1 | 高颜值,拟态风格,B站歌曲,可下载,可搜索歌词
  • 团体程序设计天梯赛-练习集 L1-038 新世界
  • 【MySQL】约束类型
  • AXI4 DDR读写测试
  • 一个.h .hpp 笔记
  • MongoDB数据类型学习笔记
  • STM32实现USB的CDC+MSC+AUDIO的USB复合设备
  • x265静态编译win10--
  • STM32学习-Keli仿真
  • LeetCode hot 100 解题思路记录(一)