git cherry-pick 文章目录1. 简介2. 格式3. 选项4. 示例4.1 挑选单个提交4.2 挑选多个提交4.3 只暂存不提交4.4 解决冲突5. 注意5.1 cherry-pick 与 merge 的区别5.2 复制的是新提交不是原提交5.3 常用别名设置6. 小结参考文献1. 简介git cherry-pick用于应用某些现有提交引入的更改。git cherry-pick可以将指定的提交commit复制到当前分支。它不会合并整个分支而是只挑选你需要的某几个提交。典型场景修复 bug 的提交需要同步到其他分支不小心在错误分支上做了提交想移植到正确分支只想要某个功能分支上的部分提交而不是全部。比如 main 分支有如下提交记录A - B - C程序在运行过程中提交 B 引入的特性存在一个隐藏很深的 bug现在需要将 B 从分支踢出但是需要保留提交 C。此时需要将分支回退reset 到 A然后使用 cherry-pick 将 C 的更改应用到 A。这里要注意cherry-pick 时 C 一定要存在不然会出错这就要求我们在回滚 main 分支前基于 main 先创建一个新的分支来保留提交 C。2. 格式gitcherry-pick[options]commit...gitcherry-pick(--continue|--skip|--abort|--quit)3. 选项-n, --no-commit 只暂存变更不自动提交可继续修改或添加其他变更 -e,--edit在提交前编辑提交信息-x在提交信息末尾添加来源说明如(cherry picked from commit...)--continue解决冲突后继续 cherry-pick--skip跳过当前提交--abort放弃 cherry-pick恢复到操作前的状态--quit放弃 cherry-pick但保留当前工作区和暂存区状态--signoff在提交信息末尾添加Signed-off-by行4. 示例4.1 挑选单个提交# 复制指定提交到当前分支gitcherry-pick a1b2c3d4.2 挑选多个提交# 复制多个提交按顺序gitcherry-pick a1b2c3d e4f5g6h# 复制一段连续范围不包含 A包含 Bgitcherry-pick A..B4.3 只暂存不提交# 只将变更加入暂存区不自动提交可继续修改gitcherry-pick-na1b2c3d4.4 解决冲突# 挑选时产生冲突gitcherry-pick a1b2c3d# CONFLICT in main.go# 手动解决冲突后gitaddmain.gogitcherry-pick--continue# 或者跳过当前提交gitcherry-pick--skip# 或者放弃整个 cherry-pickgitcherry-pick--abort5. 注意5.1cherry-pick与merge的区别对比维度git mergegit cherry-pick复制范围整个分支的所有提交只复制指定的提交历史关系保留分支结构复制后的提交是全新的新 ID适用场景合并完整功能挑选单个 bug 修复5.2 复制的是新提交不是原提交# 原提交 IDgitlog--oneline-1feature# a1b2c3d fix: 登录验证# cherry-pick 后gitcherry-pick a1b2c3d# 新提交 ID 是 x9y8z7w不同提交内容相同但提交 ID 会改变提交时间也会是当前时间5.3 常用别名设置gitconfig--globalalias.cpcherry-pickgitconfig--globalalias.cpncherry-pick -n# 使用别名gitcpa1b2c3dgitcpn a1b2c3d6. 小结需求命令说明挑选单个提交git cherry-pick commit最常用复制指定提交挑选多个提交git cherry-pick c1 c2按顺序复制多个挑选范围git cherry-pick A..B复制 A 之后到 B 的提交只暂存不提交git cherry-pick -n commit可继续修改或添加其他变更解决冲突后继续git add . git cherry-pick --continue继续放弃 cherry-pickgit cherry-pick --abort恢复到操作前一句话总结git cherry-pick只挑选你需要的提交而不是整个分支。复制后的提交是“新提交”ID 不同。常用于将 bug 修复同步到多个分支或从错误分支移植提交。**参考文献Git - git-cherry-pick Documentation