如何从pull请求中删除提交

时间:2016-03-23 02:38:59

标签: git github pull-request

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

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

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

enter image description here

我的git日志 enter image description here

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

5 个答案:

答案 0 :(得分:67)

你有几种技巧可以做到。

This post - read the part about the revert将详细解释我们想要做什么以及如何做。

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

# 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命令将使用原始提交的撤消创建新提交。

答案 1 :(得分:42)

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

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

  1. n

  2. pick //其中drop是要包含在交互中的最后提交的数量 重新设定。

  3. git push --force替换为Async Sub GetDuration(folder As String) Dim ffP As New FFProbe Dim vInfo As MediaInfo Dim totalSecs As Double = Await Task.Run(Function() vInfo = ffP.GetMediaInfo(filep) If vInfo.Duration.TotalSeconds < 10 Thread.Sleep(20000) End If Return vInfo.Duration.TotalSeconds End Function) 以表示您要放弃的提交。
  4. 保存并退出。
  5. from multiprocessing import * from timeit import repeat, timeit def job(n=1): for _ in range(n): res = 0 for i in range(1000000): res += i + i**2 + i**3 def multi_core(): for i in huge_work: i.start() i.join() def normal(): job(times) if __name__ == '__main__': times = 15 huge_work = [Process(target=job,) for _ in range(times)] print("multiprocessing used", timeit(stmt=multi_core, number=1, globals=globals())) print("normal used", timeit(stmt=normal, number=1, globals=globals()))

答案 2 :(得分:1)

请执行以下操作,

让我们说你的分支名称是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. >
  9. 现在查看本地分支提交历史记录,确保一切看起来都很好。

答案 3 :(得分:0)

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

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

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

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

答案 4 :(得分:0)

这对我有帮助:

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

  2. 在根本没有任何问题的情况下,将branch_new重置为稳定状态。 例如,要将其置于您的本地管理员级别,请执行以下操作:

    git reset —精通大师 git push —强制起源

  3. cherry-pickbranch_oldbranch_new

  4. 的提交
  5. git push