引言
在 Git 工作流中,git cherry-pick 是个非常实用的工具。它允许你把其他分支上的单个提交(commit)应用到当前分支。这比直接合并整个分支更精准,特别适合只需要同步某个 bug 修复或特定功能,而不想引入该分支上其他无关变更的场景。
核心概念
简单来说,cherry-pick 就是'摘樱桃'。你从另一个分支的提交历史里挑出特定的那一个,把它复制粘贴到当前分支来。这样生成的新提交会有新的哈希值,但内容源自原始提交。
常见场景包括:
- 选择性合并:只想把 feature 分支里的某次提交合入 main。
- 紧急修复:生产环境有个 bug 只在 release 分支修好了,需要快速同步到 develop 分支。
- 外部贡献:从开源项目或其他人的仓库里提取特定代码到你的本地分支。
基本语法
基础用法很简单,只需要指定要挑选的提交哈希值:
git cherry-pick <commit-hash>
这里的 <commit-hash> 可以通过 git log 查看历史获取。比如你想把 feature-branch 上的 abc1234 提交弄到 main 分支:
git checkout main
git cherry-pick abc1234
执行后,Git 会尝试应用更改并创建一个新的提交记录。
常用参数
实际使用中,光靠默认行为往往不够,这几个参数很关键:
-n 或 --no-commit
有时候你不想让它自动提交。加上这个选项,Git 会把更改暂存到工作区,但不生成 commit。你可以先看看效果,或者把多个 cherry-pick 攒在一起再统一提交。
git cherry-pick -n abc1234
-x 选项
为了追踪来源,建议加上 -x。它会在提交信息末尾自动追加一行类似 cherry-picked from commit <hash> 的备注,方便日后排查是谁、从哪里引入的代码。
git cherry-pick -x abc1234
--continue 和 --abort
如果 cherry-pick 过程中遇到冲突,Git 会暂停。解决完冲突并 git add 之后,用 --continue 继续;如果决定不干了,就用 --abort 回退到操作前的状态。
git cherry-pick --continue
# 或者放弃
git cherry-pick --abort
实战场景
1. 基础挑选
就像前面说的,切分支,找 hash,pick。这是最标准的流程。
2. 暂停修改再提交
假设你要 pick 一个提交,但发现还需要微调一下逻辑。用 -n 拿到文件后,改好代码,再手动 git commit 即可。
3. 批量处理
一次可以 pick 多个提交,按顺序应用:
git cherry-pick abc1234 def5678 ghi9012


