git 中的 stash 命令,今天再来学习一个命令:cherry-pick。我们正常的工作场景中,合并分支中的代码,往往都是通过 merge 命令达到效果。
但是某些情况,使用 cherry-pick 往往会非常方便。
cherry-pick 英译:精选/挑选
我遇到的使用场景:
情况一:
但是我最近有遇到过这么一个情况,我自己commit提交的几个分支代码,被别人的代码覆盖了。虽然代码被覆盖了,但是代码提交的commit还是存在的,这个时候就可以使用 cherry-pick 将我自己的部分commit 合并过来。
情况二:
我在主干 master 分支上,突然想合并某个功能分支的某一个 commit,全量的 merge 并不符合我的要求,此时可以尝试使用 cherry-pick。
首先我又一个A分支,A分支上有几个提交,如下图所示:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-98PNZGk9-1679407247760)(/Users/tomato/Library/Application Support/typora-user-images/image-20230321214248454.png)]](https://files.pic99.top/yuhaojiang/202506/5661459fceeeac6.png)
A分支:通过 `git log --oneline` 查看所有commit记录初次提交->1->2->3
现在我切换到 master 分支上,我想拿到A分支上提交记录为 2 的 commit 的内容。

可以看到上诉的截图,我们成功将A分支上提交记录为 2 的 commit 的内容拿了过来。
如果想拿多个 commit 该如何操作?
git cherry-pick commitA commitB commitC
如果想获取一个区间的commit
git cherry-pick commitA...commitB
# 不包含commitA,包含commitBgit cherry-pick commitA^...commitB
# 包含commitA,包含commitB
无论是对单个 commit 进行 cherry-pick ,还是批量处理,注意一定要根据时间线,依照 commit 的先后顺序来处理,否者会有意想不到的问题。
总结一下今天学习到的内容:
cherry-pick 挑选的意思。commit 合并到我们的当前分支,我们依托 commit的id 即可。