首页/开发/Git 与协作速查/git cherry-pick 拣选提交
合并变基与冲突71 条

git cherry-pick 拣选提交

把其他分支的指定提交复制到当前分支,生成内容相同但哈希不同的新提交;常用于把修复同时带到多个版本分支。

Git 与协作速查开发更新于 2026-10-13

git cherry-pick 是什么

git cherry-pick 把其他分支上的指定提交复制到当前分支,生成一条内容相同但哈希不同的新提交。原提交的作者信息会保留,提交者则变成执行拣选的人。它常用于把某个修复同步到多个版本分支,而不必合并整条分支。

适用的边界

拣选适合单个或少量提交的移植,不适合当日常同步手段:大规模拣选会产生内容重复的提交,让两条分支之间的关系变得难以追踪。如果目标分支本就该整体跟进另一条分支,合并或变基才是正确做法。真要使用它,也应从依赖链中最早的那条开始按顺序拣选。

基本信息

适用平台Linux / macOS / Windows(Git 2.x)
语法git cherry-pick <提交>…
结果内容相同、哈希不同;作者保留,提交者为执行者
常用参数-n 只应用不提交;-e 编辑信息;-x 附上原提交哈希
冲突处理解决后 git add,再 git cherry-pick --continue
中止方式git cherry-pick --abort

典型使用场景

  • 热修复同步:把主干上的修复复制到维护分支或旧版本分支
  • 反向移植:把新版本的补丁搬回旧版本代码线
  • 误分支补救:提交发在错误分支上,拣选到正确分支
  • 选择性引入:只想要对方分支里的某一条改动
  • 组合应用:用 -n 把多条拣选的改动攒起来合成一次提交

常用示例

常用示例
git switch release/2.x          # 切到接收方分支
git cherry-pick 3f6a2b1         # 拣选单条提交
git cherry-pick -x 3f6a2b1      # 在提交信息里记录来源哈希
git cherry-pick -n 3f6a2b1      # 只应用改动,不自动提交
git cherry-pick A..B            # 拣选一个连续区间
git cherry-pick --continue      # 冲突解决后继续
git log --oneline -3            # 核对是否生成了新提交

拣选时的常见状态

状态含义处理
新提交已生成复制成功用 log 核对内容
CONFLICT目标分支上下文不匹配解决后 add 再 continue
空提交被跳过改动已存在于目标分支无需额外处理
提示 need to resolve仍有冲突文件未解决用 status 逐个补齐
拣选会产生内容重复的提交。后续两条分支真正合并时,Git 通常能按内容识别并去重,但不要把拣选当日常同步手段。
依赖上下文的提交拣选到旧分支容易冲突,必要时沿着依赖链按顺序拣选,从最早的那一条开始。

易错点

  • 依赖上下文的提交拣选到旧分支容易冲突,必要时沿依赖链按顺序拣选
  • 拣选后原提交若被改写,两条分支会出现内容分歧,需要人工再合并
  • 把拣选当日常同步手段会让分支关系难以追踪,整体跟进应该用合并或变基
  • 拣选合并提交需要用 -m 指定父提交,只写哈希会直接报错

数据来源与参考

  • Git 官方文档:git-cherry-pick
  • Pro Git 2nd Edition · 5.3 维护项目
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌