1、什么情况下使用cherry-pick
在开发中,我们常常遇到这样的情况:线上出现了一个小 bug,需要从 master 分支上创建一个 bugfix 分支,然后在 bugfix 分支上修复这个 bug,最后将修复后的代码合并回 master 分支并上线。
上面是正常的流程。但有时,我们可能由于忘记了新建bugfix,会在错误的分支上(比如 feature 分支)进行代码修改并提交。这时候,我们不能直接将这个分支合并到 master 分支来解决 bug,因为 feature 分支上的代码还不适合上线。这时,我们可以使用 Git 的 cherry-pick 命令来快速解决这个问题。
2、cherry-pick如何使用
Git的cherry-pick命令用于将指定的commit从一个分支复制到另一个分支。这在需要从一个分支选择性地应用commit到另一个分支时非常有用(上面碰到的情况)。以下是使用cherry-pick命令的一般步骤:
-
确保你在要接受更改的目标分支上(例如
bugfix分支)。你可以使用git checkout命令切换到目标分支。例如:git checkout bugfix -
执行
git cherry-pick命令,后面跟随你想要复制的提交的哈希值。例如:git cherry-pick <解决bug commit的哈希值>你也可以提供一个范围的提交哈希值,以一次复制多个提交。例如:
git cherry-pick <起始提交的哈希值>..<结束提交的哈希值>这将复制指定范围内的所有提交到目标分支。
-
Git 将尝试将选定的
commit应用到目标分支上。如果没有冲突,它会自动应用这些提交。 -
如果发生冲突,你需要手动解决冲突。Git 会在发生冲突时停止 cherry-pick 进程,然后你需要使用编辑器或合并工具解决冲突。完成后,使用
git add命令将已解决的文件标记为已解决,然后使用git cherry-pick --continue命令继续 cherry-pick 进程。 -
如果你决定放弃 cherry-pick 进程,可以使用
git cherry-pick --abort命令来中止它。 -
当所有冲突都解决并且提交成功应用到目标分支后,你可以使用
git commit来提交这些更改。
请注意,cherry-pick不会修改原始分支上的提交。它只是将选定的提交复制到目标分支上。此外,由于提交的哈希值是唯一的,所以如果在不同的分支上有相同的提交,它们将具有不同的哈希值,因此不会重复应用。