git cherry-pick
是一个将特定提交带到当前分支的命令。顾名思义,它很容易理解为从多个提交中挑选特定提交(樱桃)的行为。
使用方法
每个提交都有一个称为哈希值的唯一 ID,可以用它来引入特定的提交。
基本命令如下。
bash
git cherry-pick <commit-hash>
让我们在不合并的情况下将该提交历史带到 main。
当前 main 分支日志如下。
提交的更改被带到 main 分支,HEAD 现在指向由 cherry-pick
带入的提交。
您还可以引入多个提交,或指定一个范围。
bash
# 引入多个提交
git cherry-pick <commit-hash1> <commit-hash2>
# 按范围引入
git cherry-pick <start-commit>..<end-commit>
主要选项
-edit
或-e
:允许您编辑提交消息。-no-commit
或-n
:仅将更改添加到暂存区而不提交。-signoff
或-s
:在提交消息中添加签名。-x
:在提交消息中添加原始提交哈希。
何时使用
- 应用错误修复
- 当您需要快速将在特定分支中发现的错误应用到其他分支时
- 示例:将生产分支中的紧急错误修复应用到开发分支
- 转移特定功能
- 当您需要将在一个分支中开发的功能的一部分带到另一个分支时
- 示例:将实验分支中的成功功能集成到主开发线中
- 发布管理
- 当选择性地引入应包含在特定发布中的更改时
- 示例:选择性地应用要包含在下一版本发布中的功能
冲突警告
由于 cherry pick 仍然是引入和合并提交历史,冲突可能随时发生。
如果发生冲突,解决冲突并继续使用以下命令。
bash
git cherry-pick --continue
其他选项:
- 中止 Cherry-pick:如果冲突解决很复杂或者您想取消 cherry-pick
bash
git cherry-pick --abort
此命令恢复到开始 cherry-pick 之前的状态。
- 保留冲突原样并继续下一个提交:如果您正在 cherry-pick 多个提交,可以保留当前冲突原样并继续下一个提交。
bash
git cherry-pick --skip
- 使用三向合并:在 cherry-pick 时使用
-m
选项执行三向合并。这有时可以使冲突解决更容易。
bash
git cherry-pick -m 1 <commit>