糟糕!代码提交到了错误的分支,如何补救?Git Cherry-Pick来帮助你

210 阅读2分钟

1、什么情况下使用cherry-pick

在开发中,我们常常遇到这样的情况:线上出现了一个小 bug,需要从 master 分支上创建一个 bugfix 分支,然后在 bugfix 分支上修复这个 bug,最后将修复后的代码合并回 master 分支并上线。

上面是正常的流程。但有时,我们可能由于忘记了新建bugfix,会在错误的分支上(比如 feature 分支)进行代码修改并提交。这时候,我们不能直接将这个分支合并到 master 分支来解决 bug,因为 feature 分支上的代码还不适合上线。这时,我们可以使用 Git 的 cherry-pick 命令来快速解决这个问题。

2、cherry-pick如何使用

Gitcherry-pick命令用于将指定的commit从一个分支复制到另一个分支。这在需要从一个分支选择性地应用commit到另一个分支时非常有用(上面碰到的情况)。以下是使用cherry-pick命令的一般步骤:

  1. 确保你在要接受更改的目标分支上(例如bugfix分支)。你可以使用git checkout命令切换到目标分支。例如:

    git checkout bugfix
    
  2. 执行git cherry-pick命令,后面跟随你想要复制的提交的哈希值。例如:

    git cherry-pick <解决bug commit的哈希值>
    

    你也可以提供一个范围的提交哈希值,以一次复制多个提交。例如:

    git cherry-pick <起始提交的哈希值>..<结束提交的哈希值>
    

    这将复制指定范围内的所有提交到目标分支。

  3. Git 将尝试将选定的commit应用到目标分支上。如果没有冲突,它会自动应用这些提交。

  4. 如果发生冲突,你需要手动解决冲突。Git 会在发生冲突时停止 cherry-pick 进程,然后你需要使用编辑器或合并工具解决冲突。完成后,使用git add命令将已解决的文件标记为已解决,然后使用git cherry-pick --continue命令继续 cherry-pick 进程。

  5. 如果你决定放弃 cherry-pick 进程,可以使用git cherry-pick --abort命令来中止它。

  6. 当所有冲突都解决并且提交成功应用到目标分支后,你可以使用git commit来提交这些更改。

请注意,cherry-pick不会修改原始分支上的提交。它只是将选定的提交复制到目标分支上。此外,由于提交的哈希值是唯一的,所以如果在不同的分支上有相同的提交,它们将具有不同的哈希值,因此不会重复应用。