如何从拉取请求中删除提交


105

我做了一个拉取请求,但是之后我在本地对该项目进行了一些提交,最终污染了我的拉取请求,我试图删除它,但是没有任何运气。

我在StackOverflow上发现了一些类似的问题,但是我无法应用其中的内容。这是我在GitHub上的第一个请求,所以这对我来说有点奇怪。

突出显示的提交是我需要保留并删除所有其他内容的提交。因为我做了一些合并工作,所以它成为历史上的第四次提交。

在此处输入图片说明

我的git日志 在此处输入图片说明

有人可以解释发生了什么以及如何解决此问题吗?


2
您需要底垫中,只有“挑”了“从GitHub加入”承诺(即行注释掉每隔提交)
罗比Averill的

1
将分支转换为分支可以添加更多说明。
2016年

what branch=您正在处理onto what branch的分支,=您请求拉入的分支
Robbie Averill

我解释了@Robbie Averill在我的答案中暗示的内容。奇怪的是,到目前为止还没有人写出答案来解释这一点。
18

Answers:


108

您有几种技巧可以做到这一点。

这篇文章-阅读有关还原的部分,将详细说明我们想要做什么以及如何做。

这是您问题的最简单解决方案:

# Checkout the desired branch
git checkout <branch>

# Undo the desired commit
git revert <commit>

# Update the remote with the undo of the code
git push origin <branch>

revert命令将使用原始提交的撤消创建一个新的提交。


2
即使我们从另一个人分叉了该项目并想删除请求请求中的某些注释,它也能正常工作吗?
Dr.jacky

106

人们不希望看到错误的提交和还原提交以撤消错误提交的更改。这会污染提交历史。

这是一种删除错误提交而不是通过还原提交撤消更改的简单方法。

  1. git checkout my-pull-request-branch

  2. git rebase -i HEAD~n//其中n是您要包含在交互式rebase中的最后提交的数量。

  3. 更换pickdrop为提交你要放弃。
  4. 保存并退出。
  5. git push --force

8
这对我来说就像一种魅力。我有一堆不应该在PR中的提交。我只是交互式地重新设置了它的基础,丢弃了这些提交并将它们推回
FullStackEngineer

1
无论如何,您应该在启动PR之前与远程主服务器同步,不是吗?
费瑞特(Ferit)

5
要推动我必须做:git push origin HEAD:myBranch --force。但是,否则很棒并且很有帮助。
ScottyBlades

@ScottyBlades我故意省略了该部分,因为它超出了范围。如果您没有设置跟踪分支,则需要设置它,或者像您一样,显式推送。
激进

4
当您要修复GitHub的开放PR这也很有用,你只需要能够做到强制推
弗拉基米尔·伊达尔戈

6

如果您要删除提交但不想保留其更改,则@ferit有一个很好的解决方案。

如果您想将该提交添加到当前分支中,但是没有必要成为当前pr的一部分,则可以执行以下操作:

  1. git rebase -i HEAD~n
  2. 将您要删除的提交交换到底部(最新)位置
  3. 保存并退出
  4. 用于git reset HEAD^ --soft取消提交更改并使它们恢复到已分阶段的状态。
  5. 用于git push --force更新远程分支,而无需删除提交。

现在,您将从远程删除了提交,但仍将在本地进行更改。


2

如下,

假设您的分支名称为my_branch,并且具有额外的提交。

  1. git checkout -b my_branch_with_extra_commits (保持此分支以其他名称保存)
  2. gitk (打开git控制台)
  3. 查找您要保留的提交。将提交的SHA复制到记事本中。
  4. git checkout my_branch
  5. gitk (这将打开git控制台)
  6. 右键单击要还原为的提交(更改前的状态),然后单击“ reset branch to here
  7. 做一个 git pull --rebase origin branch_name_to _merge_to
  8. git cherry-pick <SHA you copied in step 3. >

现在查看本地分支的提交历史记录,并确保一切看起来都不错。


0

这就是帮助我的原因:

  1. 用现有分支创建一个新分支。让我们将现有的称为branch_old新的branch_new

  2. branch_new当您完全没有问题提交时,重置为稳定状态。例如,要将其置于您的本地管理员级别,请执行以下操作:

    git reset-硬主git push -force原点

  3. cherry-pick从提交branch_oldbranch_new

  4. git push
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.