在 Git 的日常开发中,git cherry-pick 是个非常实用的命令。它允许你把其他分支上的单个或特定几个提交'搬运'到当前分支,而不需要合并整个分支。这场景很常见:比如某个 bug 修复只在 feature-branch 上完成了,但 main 分支急需这个修复,这时候用 cherry-pick 就能精准把那个提交拿过来。
基本语法
命令的核心结构很简单:
git cherry-pick <commit-hash>
这里的 <commit-hash> 就是你要应用的提交哈希值。通常先用 git log 查看历史找到对应的 ID。
常用选项与参数
除了基础用法,这几个选项在实际操作中能解决不少痛点:
1. -n 或 --no-commit:暂停自动提交
有时候你只想把代码应用过来,但不想马上生成一个新的 commit。加上 -n 后,更改会进入暂存区,你可以先调整一下代码,或者把多个 cherry-pick 的改动攒在一起再统一提交。
git cherry-pick -n abc1234
2. -x 选项:附加原始信息
为了后续追踪,建议加上 -x。它会在新的提交信息末尾自动追加一行类似 cherry-picked from commit <hash> 的记录,方便以后知道这代码是从哪搬过来的。
git cherry-pick -x abc1234
3. --continue 和 --abort:处理冲突
如果目标分支和源分支差异较大,遇到冲突是难免的。解决完冲突并执行 git add 标记后,用 --continue 继续;如果实在搞不定想放弃,直接 --abort 回滚到操作前的状态。
git cherry-pick --continue
# 或者
git cherry-pick --abort
实战示例
基础搬运
假设要把 feature-branch 上的 abc1234 提交应用到 main 分支:
git checkout main
git cherry-pick abc1234
执行成功后,你会看到类似 [main 9f8bdef] Commit message from abc1234 的输出,表示新提交已创建。
暂停修改再提交
如果想先看看效果再决定:
git cherry-pick -n abc1234
# 此时代码已变更但未提交,可继续修改
# 确认无误后再手动提交
git commit -m "Custom message"
冲突解决流程
当出现冲突时,Git 会暂停。你需要打开文件,手动删除冲突标记(<<<<<<<, =======, >>>>>>>),保留需要的内容,然后:
git add <resolved-files>
git cherry-pick --


