git cherry-pick 命令

git cherry-pick 命令就像一把精准的"手术刀",允许你将一个或多个**特定的提交(commit)**从任意分支应用到当前分支,而无需合并整个分支的历史。

🎯 核心用法

  1. 找到目标提交的哈希值 (Commit Hash)

    首先,你需要找到想要复制的那个提交的哈希值

    复制代码
    1git log source-branch --oneline

    这会列出源分支的提交历史,例如 a1b2c3d Fix login bug

  2. 切换到目标分支

    切换到你想要应用这个提交的分支

    复制代码
    1git checkout target-branch
  3. 执行 cherry-pick

    使用提交的哈希值执行命令

    复制代码
    1git cherry-pick a1b2c3d

    执行成功后,Git 会在当前分支创建一个新的提交,其内容与源提交相同,但拥有全新的哈希值。

📦 批量操作

  • 挑选多个不连续的提交

    只需将多个提交的哈希值用空格隔开

    复制代码
    1git cherry-pick <hash1> <hash2> <hash3>
  • 挑选一段连续的提交

    使用 起始哈希..结束哈希 的语法。注意,这个范围默认不包含 起始哈希,但包含结束哈希

    复制代码
    1git cherry-pick <hash-A>..<hash-B>

    如果需要包含起始哈希 A,可以使用 A^..B 的写法。

⚙️ 常用参数

参数 命令示例 说明
-n / --no-commit git cherry-pick -n <hash> 只将更改应用到工作区和暂存区,不自动创建提交。
-e / --edit git cherry-pick -e <hash> 打开编辑器,允许你修改提交信息。
-x git cherry-pick -x <hash> 在提交信息末尾追加来源信息,如 (cherry picked from commit <hash>),便于追溯。
-m git cherry-pick -m 1 <hash> 当目标提交是一个合并提交时使用,用于指定采用哪个父分支的变更。

⚠️ 处理冲突

cherry-pick 本质上是一次合并操作,因此可能会遇到代码冲突。

  1. 解决冲突:当 Git 提示冲突时,手动编辑冲突文件,保留你需要的代码。

  2. 标记解决 :解决完所有冲突后,使用 git add <文件名> 将文件标记为已解决。

  3. 继续操作

    复制代码
    1git cherry-pick --continue
  4. 放弃操作 :如果想中途放弃,可以执行:

    复制代码
    1git cherry-pick --abort

🤔 典型应用场景

  • 紧急 Bug 修复 :在 develop 分支修复了一个严重 Bug,需要立即将这个修复同步到 releasemain 分支,但又不想引入 develop 分支上其他未完成的开发内容。
  • 选择性功能同步 :某个功能分支 (feature) 中的一个提交非常有用,你只想把这个提交应用到主分支,而不是合并整个功能分支。
  • 跨分支应用补丁:将某个分支上的代码改进或补丁,精准地应用到其他多个分支上。
相关推荐
彧azz31 分钟前
Git 学习指南:从入门到进阶的完整实践手册
git·学习
浅念-10 小时前
一文吃透Git:本地操作|冲突处理|远程协作|GitFlow工作流详解
大数据·git·elasticsearch·搜索引擎·gitflow
滕州市燕猫虎计算机科技工作室个体工商户14 小时前
Git常用命令汇总
git
czhc114007566317 小时前
2026-09-11 一日综合:树的父链、git 概念、三方死锁、静默失败
大数据·git·elasticsearch
ChampaignWolf17 小时前
abapgit-agent:用 Git 当中介,让 Claude Code 自己完成 ABAP 闭环开发
git·ai·abap·claude·abapgit·mcp
嘴贱欠吻!17 小时前
如何成为 CJMP 贡献者:AtomGit贡献流程与要求
git·ci/cd
滕州市燕猫虎计算机科技工作室个体工商户18 小时前
.gitignore文件不生效的解决方法
git·.gitignore·.gitignore不生效
hasty20 小时前
一个 Git 分支名,如何穿透到 CI Runner 的 Shell?
git·ci/cd
橘色的喵21 小时前
Claude Code 状态栏脚本:一行显示模型、上下文占用、git 分支和当前目录
linux·git·bash·claude
fangjianj1 天前
git 常用命令
git