前置知识: Git

git-cherry-pick

00:00
2 min Intermediate 2026/6/14

git cherry-pick详解:选择性移植提交、跨分支应用与冲突处理。

1. cherry-pick 概述

1.1 什么是 cherry-pick

git cherry-pick 将指定的提交移植到当前分支,创建新的提交(新哈希)。

原始状态:
  A---B---C main
       \
        D---E feature

cherry-pick D 到 main:
  A---B---C---D' main
       \
        D---E feature

1.2 适用场景

场景说明
修复修复提交从开发分支移植到发布分支
选择合并合并特定功能,不合并整个分支
补丁回移维护分支的修复回移到主分支
提交修正将误提交错误分支的提交移到正确分支

2. 基本用法

2.1 单个提交

git cherry-pick abc1234

2.2 多个提交

# 多个提交
git cherry-pick abc1234 def5678

# 提交范围
git cherry-pick abc1234..def5678    # 不包含 abc1234
git cherry-pick abc1234^..def5678   # 包含 abc1234

2.3 常用选项

# 只应用变更但不提交
git cherry-pick -n abc1234

# 保留原始作者信息
git cherry-pick -x abc1234    # 在消息中添加原始提交哈希

# 修改提交消息
git cherry-pick -e abc1234

# 保留提交的父提交信息(用于合并提交)
git cherry-pick -m 1 abc1234

3. 冲突处理

3.1 解决冲突

git cherry-pick abc1234
# CONFLICT: ...

# 解决冲突
vim conflicted-file.js
git add .
git cherry-pick --continue

3.2 跳过提交

git cherry-pick --skip

3.3 放弃 cherry-pick

git cherry-pick --abort

4. 实际场景

4.1 热修复

# 在 develop 分支修复了 Bug
git checkout develop
git commit -m "fix: resolve critical bug"

# 将修复移植到 release 分支
git checkout release/v2.0
git cherry-pick abc1234

4.2 误提交修正

# 误提交到 main
git checkout main
git log --oneline -3
# abc1234 feat: should be in feature branch

# 移植到正确分支
git checkout feature
git cherry-pick abc1234

# 从 main 移除
git checkout main
git revert abc1234

4.3 批量移植

# 将 feature 分支的最近3个提交移植
git checkout main
git cherry-pick feature~3..feature

5. 注意事项

  • cherry-pick 创建提交(新哈希),不是移动提交
  • 同一变更 cherry-pick 两次会产生重复提交
  • 合并提交的 cherry-pick 需要指定父提交编号
  • cherry-pick 后可能需要解决上下文冲突

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式