你有没有遇到过这种情况:同事在一个分支上修了一个bug,你急需这个修复,但那个分支还有十个你不需要的新功能?
传统的git merge会把整个分支合并过来,不需要的东西也一起带过来了。这时候cherry-pick就派上用场了。
一句话定位
cherry-pick就是"只摘那颗樱桃"——从一堆提交里,精准挑出你想用的那一个,应用到当前分支。
它是什么
cherry-pick是Git的一个命令,用来把某次特定的提交(commit)应用到当前分支。
核心特点:
- 只复制提交的内容(文件改动),不复制提交历史
- 在当前分支生成一个新的提交,作者和时间都是你
- 适合跨分支取用单个修复
怎么用
基础用法
# 从其他分支的提交中挑一个
git cherry-pick abc1234
abc1234是目标提交的哈希值(前7位就够了)。
实际场景
场景1:主分支有bug,develop分支已经修好了
# 切回主分支
git checkout main
# 找到develop分支的修复提交
git log develop --oneline | grep "fix: xxx"
# 挑过来
git cherry-pick def5678
场景2:你搞错了分支,在一个错误的分支上做了提交
# 记录这个提交的哈希
git log --oneline
# 切换到正确的分支
git checkout correct-branch
# 把那次提交搬过去
git cherry-pick aaa1111
场景3:一次挑多个提交
# 挑连续的多个提交(从旧到新)
git cherry-pick abc1234 def5678 ghi9012
注意事项
- 冲突正常解决:如果当前分支和挑来的提交有冲突,像正常merge一样处理即可
- 重复提交会警告:如果某个提交已经存在,Git会提示跳过,不会重复应用
- 不要cherry-pick大范围分支:只挑小范围改动,大范围用merge更合适
和merge有什么区别
| merge | cherry-pick | |
|---|---|---|
| 范围 | 整个分支 | 单个或少数提交 |
| 历史 | 保留完整分支历史 | 在新分支上重建提交 |
| 适用 | 功能分支整合 | 跨分支取用修复 |
一句话:merge是"把整条河引进来",cherry-pick是"只舀一瓢水"。
总结
cherry-pick是Git里的小巧工具,适合精准取用某个修复或改动。不是替代merge的工具,而是它的补充——当你只需要其中一小部分时,它比merge干净得多。
下次遇到"只要那个修复,其他不要"的情况,试试cherry-pick吧。