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

git的cherry-pick

git cherry-pick 是 Git 中一个强大的命令,用于将指定的提交(commit)​​ 从其他分支复制到当前分支。与合并 (merge) 不同,它只选择性引入特定提交的变更,而不是整条分支的历史。以下是核心要点:


核心概念

  1. 精准复制提交
    复制一个或多个提交的修改(文件改动),在当前分支生成内容相同但哈希值不同的新提交。

  2. 避免全分支合并
    当需要引入其他分支的部分功能/修复,而非整个分支时使用(例如:只移植一个关键 Bug 的修复)。


使用场景

  • ✅ 将 develop 分支的某次 Bug 修复提交应用到 main 分支
  • ✅ 从废弃分支中救回特定功能提交
  • ✅ 跨分支选择性同步代码(非完整合并)
  • ❌ 不适用于需保留完整分支关系的场景(此时用 merge

基础命令

# 复制单个提交
git cherry-pick <commit-hash># 复制多个连续提交(左开右闭区间)
git cherry-pick <start-commit>..<end-commit># 复制多个不连续提交
git cherry-pick <hash1> <hash2>

操作步骤

  1. 切换到目标分支

    git checkout main
  2. 执行 cherry-pick

    git cherry-pick 1a2b3c4d  # 提交哈希值
  3. 解决冲突(若发生)​

    • 手动修改冲突文件
    • 标记为已解决:
      git add <file>
    • 继续完成操作:
      git cherry-pick --continue
  4. 取消操作(冲突时放弃)​

    git cherry-pick --abort

常用选项

选项说明
-e编辑新提交的说明信息
-n只复制修改,不生成提交(需手动提交)
-x在提交信息中追加来源哈希值(便于溯源)
-s添加操作者签名(Signed-off-by 标签)

典型问题与解决

  1. 冲突处理
    Git 会在复制提交时暂停操作,需手动解决冲突后:

    git add . && git cherry-pick --continue
  2. 跨分支提交依赖问题
    如果复制的提交依赖于其他未选取的提交,可能导致逻辑错误。此时需检查代码完整性。

  3. 历史污染
    过度使用会导致分支历史零碎混乱,需谨慎使用!


示例流程

# 从 feature 分支复制关键提交
git checkout main
git cherry-pick 5e6f7a8   # 提交哈希
git push origin main      # 推送到远程

​**VS git merge / git rebase**​

工具作用差异点
cherry-pick复制特定提交精准控制,但易碎片化历史
merge整合完整分支保留历史,但引入无关提交
rebase将当前分支变基到目标分支重写历史,影响协作分支

总结​:git cherry-pick 是精准移植提交的高效工具,适用于需选择性引入代码的场景。务必注意提交依赖和历史整洁性,避免滥用!

http://www.lryc.cn/news/591089.html

相关文章:

  • Py-Clipboard :iOS与Windows互相共享剪贴板(半自动)
  • AI+医疗!VR和MR解剖学和针灸平台,智能时代如何重塑健康未来
  • vue3实现web端和小程序端个人签名
  • [RAG] LLM 交互层 | 适配器模式 | 文档解析器(`docling`库, CNN, OCR, OpenCV)
  • docker安装与简单项目上手
  • 如何实现微信小程序引导组件【添加到我的小程序】+ 附源码
  • wx小程序原生开发使用高德地图api
  • 大语言模型任务分解与汇总:从认知瓶颈到系统化解决方案
  • 分布式分片策略中,分片数量的评估与选择
  • SAP-ABAP:SAP的‘cl_http_utility=>escape_url‘对URL进行安全编码方法详解
  • 2025毫米波雷达技术白皮书:智能汽车与物联网的感知核心
  • 【web安全】DVWA存储型XSS分析与利用
  • 【Linux系统】进程地址空间
  • 一款基于PHP开发的不良事件上报系统源码,适用于医院安全管理。系统提供10类事件类别、50余种表单,支持在线填报、匿名上报及紧急报告。
  • 亚马逊广告进阶指南:广告成本预算怎么设置合理
  • Ubuntu20.04 安装qt5.12.8
  • Unity_通过鼠标点击屏幕移动屏幕里的一个对象
  • Django 实战:静态文件与媒体文件从开发配置到生产部署
  • 贴吧项目总结二
  • 基于Rust Softplus 函数实践方法
  • 【项目经验】小智ai源码学习记录
  • Webpack5 新特性与详细配置指南
  • 基于LSTM的机场天气分析及模型预测
  • Python eval函数详解 - 用法、风险与安全替代方案
  • Go语言学习日志(一)
  • Python应用进阶DAY7--面向对象编程基本特性和super函数
  • 电子电路中的电压符号命名约定
  • FreeSWITCH配置文件解析(6) mod_format_cdr 话单中字段解析
  • 浅谈自动化设计最常用的三款软件catia,eplan,autocad
  • 云服务器如何设置防火墙和安全组规则?