一、为什么需要 cherry-pick
假设你有两个分支:
main分支:主开发分支,包含所有功能。feature分支:开发新功能的分支。
如果 feature 分支上有一个 重要的修复提交(比如修复了一个 bug),但你不想把整个 feature 分支合并到 main,只想把这个修复单独应用到 main,这时候就可以用 cherry-pick。
二、cherry-pick 的核心思想
找到目标提交:先找到你想复制的提交的 哈希值(类似身份证号)。
应用提交:用
git cherry-pick <哈希值>把这个提交“移植”到当前分支。生成新提交:Git 会为这个“摘来的提交”生成一个新的提交记录(哈希值不同),但内容相同。
三、具体操作步骤
1. 查看提交历史
git log --oneline这会显示所有提交的哈希值和简要信息。例如:
a1b2c3d (feature) Fix bug in login
e4f5g6h (main) Add new feature你想复制的是 a1b2c3d 这个提交。
2. 切换到目标分支
git checkout main确保你当前在想应用提交的分支(比如 main)。
3. 执行 cherry-pick
git cherry-pick a1b2c3dGit 会把 a1b2c3d 这个提交应用到 main 分支上,生成一个新的提交。
四、cherry-pick 的实际场景
场景 1:单独应用一个修复
问题:
feature分支上有一个修复 bug 的提交,但feature分支还有未完成的功能。解决方案:用
cherry-pick将修复提交复制到main分支,避免合并整个feature分支。
场景 2:修复紧急问题
问题:线上环境出现一个严重 bug,但修复代码在另一个分支上。
解决方案:用
cherry-pick将修复提交快速应用到main分支,立即发布修复。
场景 3:回滚特定提交
问题:某个提交引入了问题,但不想回滚整个分支。
解决方案:用
cherry-pick将“撤销该提交”的提交应用到当前分支。
五、cherry-pick 的注意事项
生成新提交:
cherry-pick会生成一个新的提交(哈希值不同),而不是直接复制原提交。
例如:原提交是
a1b2c3d,cherry-pick后会生成x9y8z7w。
可能产生冲突:
如果被选中的提交与当前分支的代码有冲突,Git 会提示你手动解决冲突。不要频繁使用:
cherry-pick会打乱提交历史,导致分支间的依赖关系复杂化。
适合小规模修复,不适合大规模合并。
六、cherry-pick 和 merge/rebase 的区别
七、示例:用 cherry-pick 应用一个修复
查看提交历史:
git log --oneline假设输出:
a1b2c3d (feature) Fix bug in login
e4f5g6h (main) Add new feature切换到
main分支:
git checkout main执行
cherry-pick:
git cherry-pick a1b2c3dGit 会输出:
[main 1234567] Fix bug in login
1 file changed, 1 insertion(+)验证结果:
git log --oneline输出:
1234567 (main) Fix bug in login
e4f5g6h (main) Add new feature八、总结
cherry-pick的作用:从一个分支中“摘取”特定的提交,应用到另一个分支。适用场景:修复 bug、快速应用某个更改、回滚特定提交。
注意事项:生成新提交、可能冲突、避免过度使用。
一句话记住:
cherry-pick 就是“摘果子”,只挑你需要的那颗果子,而不是整个果园。
评论区