{{< details >}}

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署

{{< /details >}}

使用 git cherry-pick 将特定提交的更改应用到您当前的工作分支。使用此命令可以:

  • 将错误修复从默认分支回移到先前的发布分支。
  • 将更改从一个分支复制到上游仓库。
  • 在不合并整个分支的情况下应用特定更改。

您还可以使用极狐GitLab UI 来 cherry-pick。有关更多信息,请参阅 Cherry-pick changes

{{< alert type=”warning” >}}

谨慎使用 git cherry-pick,因为它可能会创建重复提交并可能使您的项目历史复杂化。

{{< /alert >}}

Cherry-pick 一个单一提交

要从另一个分支 cherry-pick 一个单一提交到您当前的工作分支:

  1. 检出您要 cherry-pick 到的分支:

    git checkout your_branch
    
  2. 确定要 cherry-pick 的提交的安全散列算法 (SHA)。 要找到这个,检查提交历史或使用 git log 命令。例如:

    $ git log
    
    commit 0000011111222223333344444555556666677777
    Merge: 88888999999 aaaaabbbbbb
    Author: user@example.com
    Date:   Tue Aug 31 21:19:41 2021 +0000
    
  3. 使用 git cherry-pick 命令。将 <commit_sha> 替换为您确定的提交的 SHA:

    git cherry-pick <commit_sha>
    

Git 将指定提交的更改应用到您当前的工作分支。如果有冲突,会显示通知。然后您可以解决冲突并继续 cherry-pick 过程。

Cherry-pick 多个提交

要从另一个分支 cherry-pick 多个提交到您当前的工作分支:

  1. 检出您要 cherry-pick 到的分支:

    git checkout your_branch
    
  2. 确定要 cherry-pick 的提交的安全散列算法 (SHA)。 要找到这个,检查提交历史或使用 git log 命令。例如:

    $ git log
    
    commit 0000011111222223333344444555556666677777
    Merge: 88888999999 aaaaabbbbbb
    Author: user@example.com
    Date:   Tue Aug 31 21:19:41 2021 +0000
    
  3. 对每个提交使用 git cherry-pick 命令, 将 <commit_sha> 替换为提交的 SHA:

    git cherry-pick <commit_sha_1>
    git cherry-pick <commit_sha_2>
    ...
    

或者,您可以使用 .. 表示法 cherry-pick 一系列提交:

   git cherry-pick <start_commit_sha>..<end_commit_sha>

这会将 <start_commit_sha><end_commit_sha> 之间的所有提交应用到您当前的工作分支。

Cherry-pick 一个合并提交

Cherry-pick 一个合并提交会将合并提交的更改应用到您当前的工作分支。

要从另一个分支 cherry-pick 一个合并提交到您当前的工作分支:

  1. 检出您要 cherry-pick 到的分支:

    git checkout your_branch
    
  2. 确定要 cherry-pick 的提交的安全散列算法 (SHA)。 要找到这个,检查提交历史或使用 git log 命令。例如:

    $ git log
    
    commit 0000011111222223333344444555556666677777
    Merge: 88888999999 aaaaabbbbbb
    Author: user@example.com
    Date:   Tue Aug 31 21:19:41 2021 +0000
    
  3. 使用带有 -m 选项的 git cherry-pick 命令和您要用作主线的父提交的索引。 将 <commit_sha> 替换为合并提交的 SHA,<parent_index> 替换为父提交的索引。索引从 1 开始。例如:

    git cherry-pick -m 1 <merge-commit-hash>
    

这会将 Git 配置为将第一个父提交用作主线。要将第二个父提交用作主线,请使用 -m 2

相关主题

故障排除

如果在 cherry-pick 过程中遇到冲突:

  1. 手动在受影响的文件中解决冲突。
  2. 暂存解决的文件:

    git add <resolved_file>
    
  3. 继续 cherry-pick 过程:

    git cherry-pick --continue
    

要中止 cherry-pick 过程并返回到之前的状态, 请使用以下命令:

git cherry-pick --abort

这将撤销 cherry-pick 过程中的任何更改。