如何为提议的 cherry-pick 打开 GitHub PR
How to open GitHub PR for a proposed cherry-pick
GitHub 拉取请求都是关于 合并 两个分支:
- "remote" 分支,包含您要合并的新更改。
- 您要合并到的 "local" 分支,GitHub 调用 "base" 分支。
有没有办法创建一个分支,该分支显示与给定的择优选择相同的合并冲突,并且在合并时相当于执行该择优选择?在这种情况下,我们知道 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/source
在 eacf32
的分支机构:
git branch cherrypick/source eacf32
你会在 cherrypick/target
中合并 cherrypick/source
如何处理合并的结果?
可能的合并冲突和最终结果的内容将与 cherry-pick 相同,您显然必须在实际 my/work
分支之上选择该提交的内容。
从图中可以看出:cherry-pick 的合并基数必须 为p
,因此您将无法创建 PR针对您最初的 my/work
分支,其结果与 cherry-pick 相同。
GitHub 拉取请求都是关于 合并 两个分支:
- "remote" 分支,包含您要合并的新更改。
- 您要合并到的 "local" 分支,GitHub 调用 "base" 分支。
有没有办法创建一个分支,该分支显示与给定的择优选择相同的合并冲突,并且在合并时相当于执行该择优选择?在这种情况下,我们知道 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/source
在eacf32
的分支机构:git branch cherrypick/source eacf32
你会在
cherrypick/target
中合并
cherrypick/source
如何处理合并的结果?
可能的合并冲突和最终结果的内容将与 cherry-pick 相同,您显然必须在实际 my/work
分支之上选择该提交的内容。
从图中可以看出:cherry-pick 的合并基数必须 为p
,因此您将无法创建 PR针对您最初的 my/work
分支,其结果与 cherry-pick 相同。