了解 Git cherry-pick

profile image

git cherry-pick 是一个将特定提交选择性地带到另一个分支的命令,对于错误修复、功能转移和发布管理非常有用。

本帖由 DeepL 翻译。如有任何翻译错误,请告知我们!

git cherry-pick 是一个将特定提交带到当前分支的命令。顾名思义,它很容易理解为从多个提交中挑选特定提交(樱桃)的行为。

Image.png

使用方法

每个提交都有一个称为哈希值的唯一 ID,可以用它来引入特定的提交。

Image.png

基本命令如下。

bash
git cherry-pick <commit-hash>

让我们在不合并的情况下将该提交历史带到 main。

当前 main 分支日志如下。

Image.png

Image.png

Image.png

提交的更改被带到 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>
❤️ 0
🔥 0
😎 0
⭐️ 0
🆒 0