首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排除已在PR中的PR的提交

排除已在PR中的PR的提交
EN

Stack Overflow用户
提问于 2018-10-12 02:13:45
回答 3查看 66关注 0票数 0

我有一个开放的公关,我已经承诺了

我做了另一次提交,只想用这些更改创建另一个PR。但是,前面的提交就在那里。

我意识到分支可以解决这个问题,然而,我们还是来了。我是否只需要等待PR合并?

EN

回答 3

Stack Overflow用户

发布于 2018-10-12 03:32:02

我有一个开放的公关,我已经提交了

在这一点上,您的存储库看起来像这样。

代码语言:javascript
复制
A - B [master]
     \
      C [pr1]

Commit B是master所在的位置。您有一个名为pr1的分支,上面有一个commit C。

我做了另一个提交,只想用这些更改创建另一个PR ..但是,前面的提交就在那里。

可能发生的情况是,您从pr1分支而不是从master分支导致了这一结果。

代码语言:javascript
复制
A - B [master]
     \
      C [pr1]
       \
        D [pr2]

当您为pr2创建PR时,默认情况下,基本分支是master,因此它在PR中显示CD

如果D 中的工作不依赖于 C,那么您想要的是从master分支pr2和commit D

代码语言:javascript
复制
      D [pr2]
     /
A - B [master]
     \
      C [pr1]

您可以通过在master上重新设置pr2的基础来修复此问题。

代码语言:javascript
复制
git rebase --onto master pr1 pr2

这意味着重播从pr1开始(但不包括)到(并包括) master上的pr2的提交。然后你可以推送pr2并创建一个独立的PR。

如果D 中的工作确实依赖于 C,那么最好将pr1放在pr1之上。为pr2创建PR,基址为pr1,而不是master。一旦pr1被审查和接受,那么pr2就可以被审查和接受。

一定要在PR描述中注明,pr2堆叠在pr1之上,这样审查者就不会错过它。“这取决于#123”,其中#123是pr1的PR的ID。

票数 1
EN

Stack Overflow用户

发布于 2018-10-12 03:03:54

只需从你想要开始的任何点创建一个新的分支,然后精选另一个分支。这将在其他分支的最后一个修订上应用所涉及的更改,而不应用其他更改(假设它是该分支的最后一个修订)。

票数 0
EN

Stack Overflow用户

发布于 2018-10-12 05:13:14

要做到这一点,一个简单的方法是使用interactive rebase

如果您在分支上运行git log --oneline,您应该会看到如下所示的内容:

代码语言:javascript
复制
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的方法是将ccccccc提交到bbbbbbb中,创建一个新的提交ddddddd。为此,您需要执行以下步骤:

1。运行git rebase -i aaaaaaa以打开交互式rebase,从紧接要删除的提交之前的提交开始

这将打开已配置的文本编辑器,其中显示的内容如下:

代码语言:javascript
复制
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

该列表显示了交互式rebase将执行的操作:从aaaaaaa中选择bbbbbbb,然后选择ccccccc

2。正如我上面所说的,您希望 cccccccbbbbbbb中,因此将ccccccc之前的单词pick替换为squash

代码语言:javascript
复制
pick bbbbbbb Your (bad) commit you want to remove from history
squash ccccccc Your (good) commit you want to keep

3。保存文件,然后关闭文本编辑器。

4。将打开另一个文本编辑器,要求您使用cccccccbbbbbbb的组合来指定正在创建的新提交的消息-出于本例的目的,我将其称为ddddddd

代码语言:javascript
复制
# 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

在这里,您可能想要删除除最后一行之外的所有内容,这一行包含您最近提交的消息,但是您可以随意定制该消息。

5。保存文件,然后关闭文本编辑器。

rebase已经完成,您的历史记录应该如下所示:

代码语言:javascript
复制
ddddddd (HEAD -> your-branch-name) Your (good) commit you want to keep
aaaaaaa (master) Commit from you or someone else

6。现在,您所要做的就是发送以将分支推送回您的origin (例如GitHub/BitBucket/GitLab)等,以便更新您的pull-request。

为此,您必须执行一个push --force,,以便用这个新分支替换您的远程分支。

代码语言:javascript
复制
git push origin your-branch-name --force

当然,您始终可以选择关闭以前的pull-request,然后打开一个新的pull-request(使用不同的分支名称)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52766532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档