创见博客
git cherry-pick
七崽爱吃小饼干2026/05/27阅读 1

git cherry-pick 是 Git 中精准提取某一个/几个提交,并将其复制到当前分支的命令。

简单说:只把指定的 commit 搬到当前分支,不合并整个分支。

一、核心用法

1. 基础:提取单个提交

  1. 先找到要提取的提交哈希值(commit id,前7位即可)
bash
# 查看提交记录,复制需要的 commit id
git log
  1. 切换到目标分支(你要把提交搬过来的分支)
bash
git checkout 目标分支
  1. 执行 cherry-pick
bash
git cherry-pick <commit-id>

示例:

bash
# 把 abc1234 这个提交复制到当前分支
git cherry-pick abc1234

2. 进阶用法

提取连续多个提交

bash
# 提取 commit1 到 commit2 之间的所有提交(包含两端)
git cherry-pick commit1^..commit2

提取多个不连续提交

bash
git cherry-pick commit1 commit2 commit3

只保留修改,不自动提交

bash
git cherry-pick -n <commit-id>
# 或 --no-commit
git cherry-pick --no-commit <commit-id>

二、最常用场景

  1. 修复bug:A分支修复了bug,只想把这个修复提交同步到主分支
  2. 复用功能:只需要某个分支的单个功能提交,不合并全部分支
  3. 回滚错误提交:用 cherry-pick 恢复误删的提交

三、冲突处理(高频!)

cherry-pick 遇到代码冲突会暂停,提示:

Automatic cherry-pick failed
fix conflicts and then commit the result

解决步骤:

  1. 打开文件,手动解决冲突
  2. 标记冲突已解决
bash
git add .
  1. 继续执行 cherry-pick
bash
git cherry-pick --continue

中途放弃 cherry-pick

bash
git cherry-pick --abort

四、常用参数

参数作用
-n / --no-commit只应用修改,不自动生成新提交
--continue解决冲突后继续执行
--abort取消操作,回退到执行前状态
-e / --edit编辑提交信息
-x记录原commit id(方便追溯来源)

带来源记录的推荐用法:

bash
git cherry-pick -x <commit-id>

五、完整示例流程

  1. 从 dev 分支复制 fix-bug 提交到 main 分支
bash
# 1. 查看 dev 分支的提交,复制 commit id
git checkout dev
git log

# 2. 切换到主分支
git checkout main

# 3. 精准复制提交
git cherry-pick -x a1b2c3d

总结

  1. git cherry-pick <commit-id>:精准搬运单个提交
  2. 冲突用 --continue 继续,--abort 放弃
  3. 推荐加 -x 保留原提交记录,方便排查问题
  4. 适合只需要部分提交的场景,区别于 git merge(合并全部分支)
评论
0/100