从现有拉取请求中删除提交

时间:2016-11-24 07:45:12

标签: git github pull-request

我在Github上分叉了一个项目,做了一个提交,推到了我的分支并提出了拉取请求。一切都很好。

然后,我不断提交和推送不相关的东西,不知道所有这些都会被添加到我的拉取请求中。

我需要保留我在fork中保存的更改(在不同的分支或其他内容中),但我必须从pull请求中删除除第一次提交之外的所有更改。我该怎么做?

1 个答案:

答案 0 :(得分:5)

首先,确保您当前的工作树是干净的,然后在上次提交时创建一个新分支,以确保您不会丢失工作:

git stash
git checkout -b unrelated-stuff

现在,您切换回拉取请求分支:

git checkout feature

然后重置分支以指向特定的提交ID(您将通过git log或通过任何GUI应用程序找到ID):

git reset --hard COMMIT_ID

一旦您的本地feature分支指向您喜欢的提交,您可以强制将该分支推送到服务器:

git push --force

此时,您在服务器上的pull请求将仅包含相关提交,unrelated-stuff分支上仍然提供不相关的工作。

如果您在git stash编辑之前有任何未保存的作品,可以使用git stash pop将其取回。

  

请注意强制推送是git中非常气馁的操作,因为它可能会破坏其他人的本地存储库。在拉取请求的情况下通常应该是好的(许多回购所有者更喜欢在审核后干净整洁时合并PR),但永远不会强制推入主要或其他分支机构其他人正在努力的潜力。

理解和学习git的一个很好的资源是http://learngitbranching.js.org - 看看你是否感兴趣!