git cherry-pick 挑选提交
git cherry-pick 将指定的提交复制到当前分支,用于精准移植单个提交。
什么是 cherry-pick
cherry-pick(挑选)将其他分支的某个提交单独应用到当前分支,不合并整个分支。
基本用法
Bash
# 应用单个提交
git cherry-pick <commit>
# 应用多个提交
git cherry-pick <commit1> <commit2>
# 应用提交范围
git cherry-pick <commit1>..<commit2>
使用示例
Bash
# 场景:将 feature 分支的某个修复应用到 main
git checkout main
git cherry-pick a1b2c3d
# 输出
[a1b2c3d] Fix login bug
Date: Sat May 11 10:00:00 2026 +0800
1 file changed, 5 insertions(+)
cherry-pick 流程
Bash
原分支:
feature: A → B → C → D → E
↑
提交 C
目标分支:
main: X → Y → Z → C'
↑
C 的副本
常用选项
| 选项 | 说明 |
|---|---|
| 无选项 | 应用提交并自动提交 |
| -n, --no-commit | 应用提交但不自动提交 |
| -x | 在提交信息中记录来源 |
| --signoff | 添加签名信息 |
使用示例详解
Bash
# 应用提交但不提交(便于检查)
git cherry-pick -n a1b2c3
git diff # 检查变更
git commit # 确认后提交
# 记录提交来源
git cherry-pick -x a1b2c3
# 提交信息会添加:(cherry picked from commit a1b2c3)
# 应用多个提交
git cherry-pick a1b2c3 d4e5f6
# 应用提交范围
git cherry-pick a1b2c3..d4e5f6
处理冲突
Bash
# cherry-pick 冲突
$ git cherry-pick a1b2c3
error: could not apply a1b2c3... Fix bug
hint: after resolving the conflicts, mark the corrected paths
# 解决步骤
# 1. 编辑冲突文件
# 2. git add <file>
# 3. git cherry-pick --continue
# 或者放弃
git cherry-pick --abort
典型使用场景
| 场景 | 操作 |
|---|---|
| 热修复移植 | 将 hotfix 提交合入其他版本分支 |
| 选择性合并 | 只合入需要的提交,不全合并 |
| 撤销错误提交 | 撤销某个提交的影响 |
| 分支间共享修复 | 在多个分支应用同一修复 |
热修复示例
text
# hotfix 分支修复了 bug
git checkout hotfix
git log --oneline # 找到修复提交 abc123
# 将修复应用到其他版本分支
git checkout release/v1.0
git cherry-pick abc123
git checkout release/v2.0
git cherry-pick abc123
cherry-pick 创建新提交(新哈希),不是原提交的引用。
要点总结
- cherry-pick 将指定提交应用到当前分支
- 创建新提交,不是原提交
-n应用但不提交,便于检查-x记录提交来源- 冲突用 --continue/--abort 处理
📝 发现内容有误?点击此处直接编辑