我在Github上分叉了一个项目,做了一个提交,推到了我的分支并提出了拉取请求。一切都很好。
然后,我不断提交和推送不相关的东西,不知道所有这些都会被添加到我的拉取请求中。
我需要保留我在fork中保存的更改(在不同的分支或其他内容中),但我必须从pull请求中删除除第一次提交之外的所有更改。我该怎么做?
答案 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 - 看看你是否感兴趣!