git cherry-pick
是一条将特定提交拉入当前分支的命令。顾名思义,很容易理解,它就是从一堆提交中挑出一个特定的提交(cherry)。
工作原理
每个提交都有一个唯一的 ID(哈希值),可以用来提取特定的提交。
基本命令是
git cherry-pick <commit-hash> <commit-hash>
让我们在不进行合并的情况下将该提交的历史导入主分支。
主分支的当前日志如下所示
已提交的改动已导入主分支,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