作为一个刚接触 Git 的新手,我最初看到 cherry-pick 这个词时也是一头雾水。经过一段时间的学习和实践,我发现这其实是一个非常实用的功能,尤其是当你需要选择性地合并某些 commit 时。今天我就用最直白的方式,分享一下如何快速掌握 cherry-pick 多个 commit 的技巧。
1. Git 基础概念回顾
在开始之前,我们先简单回顾一下 Git 的基本概念。Git 是一个分布式版本控制系统,它可以帮助我们管理代码的变更历史。每次我们对代码进行修改并提交(commit),Git 都会记录下这次变更。
- commit:可以理解为一个代码变更的快照,包含了修改的内容、作者、时间等信息。
- 分支(branch):可以看作是一条独立的时间线,不同的分支可以并行开发不同的功能。
- cherry-pick:顾名思义,就是'摘樱桃',即从其他分支选择性地'摘取'某些 commit 应用到当前分支。
2. 为什么要用 cherry-pick?
有时候,我们可能只需要将某个分支中的几个特定 commit 合并到当前分支,而不是整个分支的所有变更。这时候 cherry-pick 就派上用上了。
- 场景一:修复 bug 时,发现某个 commit 已经修复了类似的问题,可以直接'摘取'这个 commit 到当前分支。
- 场景二:开发新功能时,某个 commit 包含了一些通用的代码优化,可以单独应用到其他分支。
3. 如何 cherry-pick 单个 commit
我们先从最简单的单个 commit 开始。假设我们有两个分支:main和feature,现在需要将 feature 分支上的某个 commit 应用到 main 分支。
- 首先,切换到
main分支:git checkout main - 查看
feature分支的 commit 历史:git log feature - 找到你想'摘取'的 commit 的哈希值(比如
abc123) - 执行
cherry-pick命令:git cherry-pick abc123
这样,feature 分支上的这个 commit 就被应用到 main 分支了。
4. 如何 cherry-pick 多个 commit
接下来,我们看看如何一次性 cherry-pick 多个 commit。假设我们需要将 feature 分支上的三个连续 commit(abc123、def456、ghi789)应用到 main 分支。
- 确保当前在
main分支:git checkout main - 执行
cherry-pick命令,指定 commit 范围:git cherry-pick abc123..ghi789
注意,这里的范围是左开右闭的,也就是说,abc123 不会被包含在内,只有 def456 和 ghi789 会被应用。如果需要包含 abc123,可以这样写:git cherry-pick abc123^..ghi789。
5. 常见问题及解决方法
在实际操作中,可能会遇到一些问题,这里列举几个常见的:
- 冲突:如果 的 commit 与当前分支的代码有冲突,Git 会提示你手动解决冲突。解决后,执行 即可继续。

