全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-11 6 分钟 ✍️ juanwangdev

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 创建新提交(新哈希),不是原提交的引用。

要点总结

  1. cherry-pick 将指定提交应用到当前分支
  2. 创建新提交,不是原提交
  3. -n 应用但不提交,便于检查
  4. -x 记录提交来源
  5. 冲突用 --continue/--abort 处理

📝 发现内容有误?点击此处直接编辑

← 上一篇 Three-Way Merge 三方合并
下一篇 → git merge --no-ff 禁用快进
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库