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

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.xdnf.cn/news/15695.html

相关文章:

  • smolagents - agent迭代式解题过程示例
  • Ollama使用指南-更改默认安装路径和Model路径(安装到非C盘)
  • 【46】MFC入门到精通——MFC显示实时时间,获取系统当前时间GetCurrentTime()、获取本地时间GetLocalTime()
  • HTML 极简个人介绍卡片(侧重语义化标签和响应式布局)
  • HCIE - 云计算方向考什么?一文全解
  • LIN通信驱动代码开发注意事项
  • 木马和Webshell和内存马的区别!
  • 电商行业如何做好网络安全工作?
  • 如何选择合规的上门按摩系统
  • Java中excel字典转换
  • SWD和JTAG区别
  • Kotlin 属性委托 observable 的实现原理
  • 快慢指针的应用
  • CPP学习之list使用及模拟实现
  • Java程序设计学习笔记
  • 玖[9],相机/镜头/光源
  • Spring Boot 监控:AOP vs Filter vs Java Agent
  • Cadence SPB 2024软件下载及安装教程|Cadence软件安装详细步骤附下载链接
  • java如何实现打印list对象占用多大内存
  • Web开发 01
  • 【Java开发日记】详细地讲解一下如何保证线程安全性呢?
  • vue svg实现一个环形进度条组件
  • VSCODE常规设置
  • 代码随想录算法训练营65期第22天
  • 【专题十二】栈
  • 从现场出发:能源系统中的智能设备与实际落地工具解读
  • 【Java开发日记】我们来说说 LockSupport 的 park 和 unpark
  • docker--安装--原理
  • RabbitMQ概述和工作模式
  • 60个功能OfficeBox 万彩办公大师:PDF 格式转换 OCR识别免费无广告