侧边栏壁纸
博主头像
牧云

怀璧慎显,博识谨言。

  • 累计撰写 96 篇文章
  • 累计创建 11 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

git cherry-pick

秋之牧云
2025-11-24 / 0 评论 / 0 点赞 / 13 阅读 / 0 字

一、为什么需要 cherry-pick

假设你有两个分支:

  • main 分支:主开发分支,包含所有功能。

  • feature 分支:开发新功能的分支。

如果 feature 分支上有一个 重要的修复提交(比如修复了一个 bug),但你不想把整个 feature 分支合并到 main,只想把这个修复单独应用到 main,这时候就可以用 cherry-pick


二、cherry-pick 的核心思想

  1. 找到目标提交:先找到你想复制的提交的 哈希值(类似身份证号)。

  2. 应用提交:用 git cherry-pick <哈希值> 把这个提交“移植”到当前分支。

  3. 生成新提交: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 a1b2c3d

Git 会把 a1b2c3d 这个提交应用到 main 分支上,生成一个新的提交。


四、cherry-pick 的实际场景

场景 1:单独应用一个修复

  • 问题feature 分支上有一个修复 bug 的提交,但 feature 分支还有未完成的功能。

  • 解决方案:用 cherry-pick 将修复提交复制到 main 分支,避免合并整个 feature 分支。

场景 2:修复紧急问题

  • 问题:线上环境出现一个严重 bug,但修复代码在另一个分支上。

  • 解决方案:用 cherry-pick 将修复提交快速应用到 main 分支,立即发布修复。

场景 3:回滚特定提交

  • 问题:某个提交引入了问题,但不想回滚整个分支。

  • 解决方案:用 cherry-pick 将“撤销该提交”的提交应用到当前分支。


五、cherry-pick 的注意事项

  1. 生成新提交
    cherry-pick 会生成一个新的提交(哈希值不同),而不是直接复制原提交。

  • 例如:原提交是 a1b2c3dcherry-pick 后会生成 x9y8z7w

  1. 可能产生冲突
    如果被选中的提交与当前分支的代码有冲突,Git 会提示你手动解决冲突。

  2. 不要频繁使用
    cherry-pick 会打乱提交历史,导致分支间的依赖关系复杂化。

  • 适合小规模修复,不适合大规模合并。


六、cherry-pickmerge/rebase 的区别

操作

作用

是否合并整个分支

生成新提交

适用场景

cherry-pick

挑选特定提交

单独应用某个提交

merge

合并整个分支

整体合并分支

rebase

将提交移到另一个分支的顶部

整理提交历史


七、示例:用 cherry-pick 应用一个修复

  1. 查看提交历史

git log --oneline

假设输出:

a1b2c3d (feature) Fix bug in login
e4f5g6h (main) Add new feature
  1. 切换到 main 分支

git checkout main
  1. 执行 cherry-pick

git cherry-pick a1b2c3d

Git 会输出:

[main 1234567] Fix bug in login
 1 file changed, 1 insertion(+)
  1. 验证结果

git log --oneline

输出:

1234567 (main) Fix bug in login
e4f5g6h (main) Add new feature

八、总结

  • cherry-pick 的作用:从一个分支中“摘取”特定的提交,应用到另一个分支。

  • 适用场景:修复 bug、快速应用某个更改、回滚特定提交。

  • 注意事项:生成新提交、可能冲突、避免过度使用。

一句话记住

cherry-pick 就是“摘果子”,只挑你需要的那颗果子,而不是整个果园。

0

评论区