【问题标题】:How to remove a commit that has been pushed to the remote repository using Git如何使用 Git 删除已推送到远程存储库的提交
【发布时间】:2012-03-16 02:57:54
【问题描述】:

我已经将几个提交推送到远程存储库,发现它们正在产生问题。

我怎样才能回到以前的版本?也就是去掉最近的两个commit?

【问题讨论】:

    标签: git github smartgit


    【解决方案1】:

    由于您已经将提交推送到远程存储库,最好的方法可能是还原这两个提交,这样您就不会给已经从远程存储库拉取的任何人造成任何问题。

    示例使用以下提交历史记录:

    e512d38 Adding taunts to management.
    bd89039 Adding kill switch in case I'm fired.
    da8af4d Adding performance optimizations to master loop.
    db0c012 Fixing bug in the doohickey
    

    如果您只想恢复提交而不修改历史记录,您可以执行以下操作:

    git revert e512d38
    git revert bd89039
    

    或者,如果您不希望其他人看到您添加了终止开关,然后将其删除,您可以使用以下方法回滚存储库(但是,这会导致其他已经从遥控器):

    git reset --hard da8af4d
    git push origin -f localBranch:remoteBranch
    

    其中localBranch 是本地分支的名称,remoteBranch 是远程分支的名称。

    【讨论】:

    • “向管理层添加嘲讽”产生了古老的(新的?)格言,“不要喝酒和推”。 :-)
    • @torek 我能说什么,我既是一个忠诚的饮酒者,也是一个饮酒者。
    • 以下对我有用 git reset --hard da8af4d git push origin -f localBranch:remoteBranch
    • 值得注意的是git reset --hard 将撤消工作树中的任何本地修改,包括那些不属于麻烦提交的部分。如果有疑问,当然建议先备份该工作树(快速tar 会很好)。
    【解决方案2】:

    我认为你可以在本地回滚并推送结果:

    $ git reset HEAD^ --hard
    $ git push REMOTE -f
    

    “REMOTE”是远程名称。

    【讨论】:

    • 可以这样做,但这是不可取的,因为在此期间抓住提交的任何其他人都会得到......好吧,为了避免坏话,让我们说“他们”你必须努力从你的行为中恢复过来。” :-) 最好使用“git revert”来添加一个撤消先前提交的新提交。 (将“还原”视为“添加一个提交,其补丁是完全撤消先前提交的操作”,因为它就是这样。)
    • @torek 我一开始也想到了这个,但我认为 shadowfax 可能还有其他目的,比如让每个远程提交都能正常运行,否则他会想到“还原和推送”。
    • 我想你可能会惊讶于有多少人不理解git revert。另一方面,可能有完全不同的动机(如 David M. Syzdek 的回答)。在某些情况下,没有好的解决方案,只有最不坏的解决方案(因情况而异)。
    【解决方案3】:

    首先输入这个命令。

    git log -n 4
    

    此命令将显示您最近 4 次提交及其 SHA。在此之后键入以下命令。

    git rebase -i SHA_ID
    

    输入您要删除的提交之前的提交的 SHA,而不是 SHA_ID。

    在此之后将打开一个文件,在该文件的顶部,您将看到 SHA 和您要删除的提交的消息。删除此行并保存并退出文件。

    完成此操作后,您必须推动。所以输入以下命令。

    git push -f origin master
    

    完成此操作后,您可以看到您的提交已被删除。

    【讨论】:

      【解决方案4】:
      git push origin -f last_good_commit:yourEditingBranch
      

      last_good_commit 将成为分支的新负责人。然后在本地进行硬重置:

      git reset origin/yourEditingBranch
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-31
        • 2014-01-25
        • 2010-09-20
        • 2012-05-09
        • 2011-01-01
        • 1970-01-01
        相关资源
        最近更新 更多