学习 Git 摘樱桃

🌐

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

git cherry-pick是一条将特定提交拉入当前分支的命令。顾名思义,很容易理解,它就是从一堆提交中挑出一个特定的提交(cherry)。

Image.png

工作原理

每个提交都有一个唯一的 ID(哈希值),可以用来提取特定的提交。

Image.png

基本命令是

git cherry-pick <commit-hash> <commit-hash>

让我们在不进行合并的情况下将该提交的历史导入主分支。

主分支的当前日志如下所示

Image.png

Image.png

Image.png

已提交的改动已导入主分支,HEAD 现在指向我们樱桃摘的提交。

你也可以导入多个提交,或指定一个范围。

# 获取多个提交 git cherry-pick <commit-hash1> <commit-hash2> # 获取一个范围 git cherry-pick <start-commit>..<end-commit

关键选项

  • -edit-e:允许编辑提交信息。
  • -no-commit(不提交)或-n:只将更改添加到暂存区域,不提交。
  • -signoff-s:为提交信息添加签名。
  • -x:在提交信息中添加原始提交哈希值。

何时使用?

  • 应用错误修复

    • 需要将特定分支中发现的错误快速应用到其他分支时。
    • 例如将生产分支中的紧急错误修复应用到开发分支。
  • 迁移特定功能

    • 当您只需要将一个分支中开发的部分功能迁移到另一个分支时。
    • 例如:将实验分支中的成功功能整合到主开发线中
  • 版本管理

    • 只选择性地导入应包含在特定版本中的更改。
    • 举例只选择性地应用应包含在下一版本中的功能

小心冲突

由于樱桃选择仍然是将提交合并在一起,因此随时可能发生冲突。

如果遇到冲突,可以用下面的命令解决并继续。

git cherry-pick --continue

附加选项:

  • 中止 cherry-pick:如果解决冲突很复杂,或者想取消 cherry-pick,可以运行
git cherry-pick --abort

该命令会恢复到 cherry-pick 启动前的状态。

  • 保留冲突并继续下一次提交:如果您正在对多个提交进行 cherry-pick,您可以保留当前的冲突并继续下一次提交
git cherry-pick --skip
  • 使用 3 向合并:在 cherry-pick 时使用-m选项执行 3 向合并。这有时会让冲突解决变得更容易
git cherry-pick -m 1 <commit