【问题标题】:Remove commits from an existing pull request从现有的拉取请求中删除提交
【发布时间】:2016-11-24 16:02:31
【问题描述】:

我在 Github 上创建了一个项目,提交了一个提交,推送到我的 fork 并提出了拉取请求。到那时一切都很好。

然后,我一直在提交和推送不相关的东西,却没有意识到所有这些都会被添加到我的拉取请求中。

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

【问题讨论】:

    标签: git github pull-request


    【解决方案1】:

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

    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 - 如果您有兴趣,请查看!

    【讨论】:

    • 谢谢你,这为我节省了一大堆怨恨的工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2018-06-21
    • 2014-01-25
    • 1970-01-01
    相关资源
    最近更新 更多