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

How to remove commits from a pull request

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

我在 Whosebug 上发现了一些类似的问题,但我无法应用其中的内容。 这是我在 GitHub 上的第一个 pull request,所以对我来说这一切是如何工作的有点奇怪。

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

我的git 日志

有人可以解释一下这是怎么回事以及如何解决这个问题吗?

所以请执行以下操作,

假设您的分支名称是 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. >

现在查看本地分支提交历史并确保一切正常。

你有几种方法可以做到。

会详细说明我们想做什么,怎么做。

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

# 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>

还原命令将创建一个新的提交,其中 撤消 原始提交。

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

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

  1. git checkout my-pull-request-branch

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

  3. pick 替换为 drop 以表示您要丢弃的提交。
  4. 保存并退出。
  5. git push --force

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

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

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

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

这对我有帮助:

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

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

    git重置——硬主 git push —force origin

  3. cherry-pickbranch_oldbranch_new

  4. 的提交
  5. git push