Git 中文手册

git cherry-pick 挑取其他分支的某个提交

2026-09-06 约 3 分钟阅读

只想把某个分支的某一个提交"摘"到当前分支,而不想合并整个分支?git cherry-pick 精准复制单个提交。本文讲清用法、多提交、冲突处理与场景。

场景:有个 bug 修复提交在 develop 分支上,但你正在 release 分支,只想把这个修复"搬"过来,却不想把整个 develop 合过来。这正是 git cherry-pick 的用途。

核心:精准复制单个提交

git cherry-pick 提交哈希

它会把该提交的改动应用到当前分支,并生成一个新的提交。原分支的提交不受影响。

基本用法

# 切换到要接收提交的分支
git switch release

# 摘取 develop 上的某个提交(哈希)
git cherry-pick abc1234

执行后 release 分支多了一个内容相同、但哈希不同的提交。

摘取多个提交

# 指定多个
git cherry-pick abc1234 def5678

# 摘取一个连续区间(从旧到新)
git cherry-pick 旧哈希^..新哈希   # 注意含两端
git cherry-pick 旧哈希..新哈希    # 不含旧哈希

典型应用场景

  • hotfix 修复从 develop 快速搬到 release/main
  • 把某个功能的部分提交挑到另一个分支
  • 从别的分支找回某个被遗漏的提交

遇冲突怎么处理

# 提示冲突
git status                    # 看冲突文件

# 手动解决后:
git add 冲突文件
git cherry-pick --continue    # 继续完成

# 想放弃整次 cherry-pick
git cherry-pick --abort

完整实战

# 场景:把 develop 上的一个紧急修复搬到 release
git switch release                    # 切到 release
git log develop --oneline -5          # 在 develop 找到那个修复的哈希
# 例如 9f8e7d6 fix: 修复支付回调空指针
git cherry-pick 9f8e7d6               # 摘取它
git push                              # 推送

注意事项

  • 新提交哈希与源不同,但内容一致,不会重复冲突。
  • 若源提交也曾在当前分支应用过,可能提示"empty"(改动已存在),用 --skip 跳过。
  • cherry-pick 是复制非移动,别担心源分支丢失。

一句话速记

git cherry-pick 哈希 把指定提交的改动复制到当前分支,精准选择、不合并整个分支。

?

常见问题 FAQ

cherry-pick 和 merge 有什么区别?
merge 合并的是"整个分支"的差异;cherry-pick 只把"某一个(或几个)提交"的改动复制到当前分支,精准选择、不影响其他提交。
cherry-pick 会复制提交历史还是新建?
会新建一个提交。虽然是复制的改动内容,但新提交有新的哈希和新的父提交,等于"在当前分支重放了这个改动"。
把一个 commit 从分支 A 挑到分支 B,A 里的还在吗?
还在。cherry-pick 是"复制"不是"移动",原分支的提交不受影响,两个分支各自保留该改动。
挑了多个提交遇到冲突怎么办?
cherry-pick 默认是"一个提交挑完生成一个提交"。若中途冲突,解决后 git cherry-pick --continue 继续;想放弃用 git cherry-pick --abort。