如何从pull请求中删除提交

hum*_*zed 75 git github pull-request

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

我在StackOverflow上发现了一些类似的问题,但我无法应用那里的内容.这是我在GitHub上的第一个拉取请求,所以对我来说这一切都很有用.

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

在此输入图像描述

我的git日志 在此输入图像描述

有人可以解释一下发生了什么以及如何解决这个问题?

Cod*_*ard 81

你有几种技术可以做到这一点.

这篇文章 - 阅读关于还原的部分将详细解释我们想要做什么以及如何做.

以下是解决您问题的最简单方法:

# 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>
Run Code Online (Sandbox Code Playgroud)

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

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

fer*_*rit 66

人们不希望看到错误的提交和恢复提交以撤消错误提交的更改.这会污染提交历史记录.

这是一种删除错误提交的简单方法,而不是使用还原提交撤消更改.

  1. git checkout my-pull-request-branch

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

  3. 更换pickdrop的承诺要放弃.
  4. 保存并退出.
  5. git push --force

  • 这对我来说就像一个魅力.我有一堆不应该在PR的提交.我只是互动地重新定位它,丢弃那些提交并将它们推回去 (5认同)
  • 要推动我必须这样做:`git push origin HEAD:myBranch --force`.但其他方面很有帮助. (3认同)
  • “对于要丢弃的提交,将 `pick` 替换为 `drop`。”是什么意思? (3认同)
  • @jorijnsmit,他们的意思是运行“git rebase -i HEAD~&lt;n&gt;”后,文件顶部将有“&lt;n&gt;”行提交,每行包含文本“pick &lt;commit id&gt;”。提交默认为“pick”,因此对于要删除的每个提交,请将文本“pick”更改为“drop” (3认同)
  • 当您想在GitHub中修复开放式PR时,这也很有用,您只需要能够进行强制推送即可 (2认同)
  • 对于所有不知道如何执行第 4 步 - 保存并退出的人:输入 :wq! 并按 Enter 键。 (2认同)

小智 10

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

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

  1. git rebase -i HEAD~n
  2. 将要删除的提交交换到底部(最近)位置
  3. 保存并退出
  4. 用于git reset HEAD^ --soft取消提交更改并使它们恢复到暂存状态。
  5. 用于git push --force在没有删除提交的情况下更新远程分支。

现在您已经从远程删除了提交,但在本地仍然会有更改。


Raj*_*sit 5

从您的分支中执行以下命令

git reset --soft origin/master
git commit -m "Detail of Your last commit that you want to see"
git push -f
Run Code Online (Sandbox Code Playgroud)