【发布时间】:2016-11-24 16:02:31
【问题描述】:
我在 Github 上创建了一个项目,提交了一个提交,推送到我的 fork 并提出了拉取请求。到那时一切都很好。
然后,我一直在提交和推送不相关的东西,却没有意识到所有这些都会被添加到我的拉取请求中。
我需要保留我在 fork 中所做的更改(在不同的分支或其他地方),但我必须从拉取请求中删除除第一次提交之外的所有内容。我该怎么做?
【问题讨论】:
标签: git github pull-request
我在 Github 上创建了一个项目,提交了一个提交,推送到我的 fork 并提出了拉取请求。到那时一切都很好。
然后,我一直在提交和推送不相关的东西,却没有意识到所有这些都会被添加到我的拉取请求中。
我需要保留我在 fork 中所做的更改(在不同的分支或其他地方),但我必须从拉取请求中删除除第一次提交之外的所有内容。我该怎么做?
【问题讨论】:
标签: git github pull-request
首先,确保您当前的工作树是干净的,然后在最后一次提交时创建一个新分支,以确保您不会丢失您的工作:
git stash
git checkout -b unrelated-stuff
现在,您切换回拉取请求分支:
git checkout feature
然后您将分支重置为指向特定的提交 ID(您将通过 git log 或任何 GUI 应用程序找到该 ID):
git reset --hard COMMIT_ID
一旦你的本地 feature 分支指向你喜欢的提交,你可以强制将该分支推送到服务器:
git push --force
此时,您在服务器上的拉取请求将仅包含相关的提交,不相关的工作仍可在 unrelated-stuff 分支上使用。
如果您在git stash编辑之前有任何未保存的工作,您可以通过git stash pop 取回。
请注意,强制推送是 git 中非常不鼓励的操作,因为它可能会破坏其他人的本地存储库。在拉取请求的上下文中通常应该没问题(许多 repo 所有者更喜欢仅在审查后干净整洁的情况下合并 PR),但 永远不要 强制推送到 master 或其他存在的分支其他人正在研究的潜力。
了解和学习 git 的绝佳资源是 http://learngitbranching.js.org - 如果您有兴趣,请查看!
【讨论】: