如何为提议的 cherry-pick 打开 GitHub PR

How to open GitHub PR for a proposed cherry-pick

GitHub 拉取请求都是关于 合并 两个分支:

有没有办法创建一个分支,该分支显示与给定的择优选择相同的合并冲突,并且在合并时相当于执行该择优选择?在这种情况下,我们知道 cherry-pick 将应用到的特定分支,如果这有什么不同?

例如,是否足以创建一个分支,其 HEAD 是我想要挑选的提交,并为该分支打开一个 PR?

cherry-pick 确实会尝试将两个补丁合并在一起,但是您将无法在您的工作分支上创建合并请求 来执行与 cherry 相同的操作-选择。


樱桃采摘的详细视图:

下面是我对 git cherry-pick 执行的合并操作的说明:

假设你 运行 git cherry-pick eacf32 来自分支 my/work :

# 'p' marks the parent commit of eacf32 :
---*-----*-----*------*-----* <- my/work
          \                   
           \               
            \-*---*----*----*-----*-----* <- some/other/branch
                       ^    ^
                       p   eacf32

# 'git cherry-pick eacf32' will try to resolve this merge :

                         my/work
                          v
---*-----* . . * . .* . . *----* <- would-be-cherry-pick
          \              /    /
           \            /    /
            \-*---*----*----* . . * . . *
                       ^    ^
                       p   eacf32

将其转换为等效合并:

下图:

  • 你会想要一个分支 cherrypick/target,其中包含 my/work 的实际内容,在 p 之上分组为一个提交——父提交eacf32 :

    # start from your branch (you will have the expected content) :
    git checkout my/work
    # create a new branch and switch to it :
    git checkout -b cherrypick/target
    # use 'reset --soft' to move to the parent of eacf32
    # ('--soft' will keep all the differences as staged changes) :
    git reset --soft eacf32^
    # commit that :
    git commit
    
  • 你会想要 cherrypick/sourceeacf32 的分支机构:

    git branch cherrypick/source eacf32
    
  • 你会在 cherrypick/target

  • 中合并 cherrypick/source

如何处理合并的结果?

可能的合并冲突和最终结果的内容将与 cherry-pick 相同,您显然必须在实际 my/work 分支之上选择该提交的内容。

从图中可以看出:cherry-pick 的合并基数必须p,因此您将无法创建 PR针对您最初的 my/work 分支,其结果与 cherry-pick 相同。