我有一个公开的PR,我已经提交了
我进行了另一次提交,并希望通过这些更改来创建另一个PR。.但是先前的提交在那里。
我知道分支机构可以解决这个问题,但是,到此为止。我是否只需要等待PR合并?
答案 0 :(得分:1)
我有提交的公开PR
那时,您的存储库看起来像这样。
A - B [master]
\
C [pr1]
提交B是master
所在的位置。并且您有一个名为pr1
的分支,上面有一个提交C。
我进行了另一次提交,并想通过这些更改来创建另一个PR。.但是以前的提交在那里。
可能发生的事情是您从pr1
分支而不是master
分支。
A - B [master]
\
C [pr1]
\
D [pr2]
默认情况下,当您为pr2
创建PR时,基本分支为master
,因此它在PR中显示C
和D
。
如果 D
中的工作不依赖于C
,您想要的是pr2
并提交{{1 }}从D
分支。
master
您可以通过将 D [pr2]
/
A - B [master]
\
C [pr1]
重新部署到pr2
上来解决此问题。
master
这表示将从(但不包括)git rebase --onto master pr1 pr2
到(并包括)pr1
的提交重播到pr2
上。然后,您可以按master
并创建独立的PR。
如果 pr2
中的工作确实取决于D
,那么最好将C
放在{{1 }}。为pr2
创建一个PR,基址为pr1
,而不是pr2
。 pr1
被审核并接受后,master
就可以被审核并接受。
请确保在PR说明中记下pr1
堆积在pr2
的顶部,这样审阅者就不会错过它。 “这取决于#123”,其中#123是pr2
的PR的ID。
答案 1 :(得分:0)
只需从要开始的任何位置创建一个新分支,然后挑选其他分支即可。这将应用在另一个分支的最新修订中涉及的更改,而不会进行其他更改(假定它是该分支的最新修订)。
答案 2 :(得分:0)
一种简单的方法是使用interactive rebase。
如果在分支机构上运行git log --oneline
,您应该会看到类似以下内容的内容:
ccccccc (HEAD -> your-branch-name) Your (good) commit you want to keep
bbbbbbb bbbbbbb Your (bad) commit you want to remove from history
aaaaaaa (master) Commit from you or someone else
您说要删除bbbbbbb
并替换为ccccccc
。
由于ccccccc
自bbbbbbb
起包含更改,因此将其删除会引起很多冲突,因为您必须将ccccccc
合并到aaaaaaa
中。
git
的实现方式是将squash ccccccc
放入bbbbbbb
,创建新的提交ddddddd
。为此,您需要执行以下步骤:
1 。运行git rebase -i aaaaaaa
,从您要删除的提交之前的立即提交开始,打开交互式rebase
这将打开您配置的文本编辑器,如下所示:
pick bbbbbbb Your (bad) commit you want to remove from history
pick ccccccc Your (good) commit you want to keep
# Rebase aaaaaaa..f5a9551 onto aaaaaaa (2 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
#
# Note that empty commits are commented out
该列表显示了交互式资源库将执行的操作:
从aaaaaaa
中选择bbbbbbb
,然后选择ccccccc
2 。就像我在上面说的,您想将squash ccccccc
改成bbbbbbb
,所以用pick
将ccccccc
之前的单词squash
替换为pick bbbbbbb Your (bad) commit you want to remove from history
squash ccccccc Your (good) commit you want to keep
:
ccccccc
3 。保存文件,然后关闭文本编辑器。
4 。将打开另一个文本编辑器,要求您使用bbbbbbb
和ddddddd
的组合来指定正在创建新提交的消息,为方便起见,我将其称为# This is a combination of 2 commits.
# This is the 1st commit message:
Your (bad) commit you want to remove from history
# This is the commit message #2:
Your (good) commit you want to keep
这个例子:
ddddddd (HEAD -> your-branch-name) Your (good) commit you want to keep
aaaaaaa (master) Commit from you or someone else
在这里,您可能要删除除最后一行以外的所有内容,该行包含最新提交的消息,但是可以随意自定义消息。
5 。保存文件,然后关闭文本编辑器。
重新设置已经完成,您的历史记录应如下所示:
origin
6 。现在,您要做的就是发送以将分支推送回您的push --force
(例如GitHub / BitBucket / GitLab)等,以更新您的请求请求。
为此,您必须执行 git push origin your-branch-name --force
,以便将您的远程分支替换为新分支。
:checked
当然,您始终可以选择关闭前一个拉取请求,然后打开一个新的(具有不同的分支名称)请求。