什么是 Git 的 cherry-pick
cherry-pick 是把另一个分支上的指定提交"摘"到当前分支:git cherry-pick <哈希>,改动会以新提交应用。适合热修复回合、跨分支搬个别提交;会产生新哈希,滥用会让历史难追溯。
cherry-pick(摘樱桃)= 从别的分支挑指定的提交,把它的改动复制应用到当前分支。 merge 是整个分支都要,cherry-pick 是"只要这一个"。
基本用法
git checkout release-1.2
git cherry-pick a1b2c3d # 把 main 上那个修复摘过来
典型场景
- 热修复回合:main 上修的 bug 要同步到 release 分支,但 main 还有一堆不该进 release 的新功能——cherry-pick 只摘修复;
- 摘取别人的提交:同事的实验分支里有个工具函数你想先用;
- 提交错了分支:提交到 main 的功能提交摘到 feature 分支(再把 main 上的 reset 掉)。
要点
- 摘过来的是改动(diff),生成新哈希的提交——与原标题相同但不是同一个提交;
- 连续一串用
git cherry-pick A^..B; - 冲突处理和 merge 一样:解决 → add →
git cherry-pick --continue。
常见问题(FAQ)
Q:cherry-pick 会导致重复提交吗?
会。同一改动以不同哈希存在于两个分支,之后两分支合并时 Git 通常能自动识别相同改动跳过,但历史里确实有两条记录。能 merge 就别滥用 cherry-pick。
Q:和 rebase 有什么区别?
rebase 把一串提交"移动"到新基点(原位置不再保留引用);cherry-pick 是"复制"指定提交,原分支不动。
Q:摘取时想改提交信息?
加 -e 进入编辑器;-x 会在信息里追加 "(cherry picked from ...)" 来源记录,推荐加上便于追溯。