我已经执行了git提交,然后是git推送。如何在本地和远程存储库上恢复该更改?

$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael Silver@gmail.com>
Date:   Tue Jun 11 12:24:23 2011 -0700

当前回答

另外:

git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master

强制将源远程存储库的主分支转移到上一次提交的父分支

其他回答

git重置HEAD~1如果你不希望你的变化消失(非阶段性的变化)。git push -f [origin] [branch]

git reset --hard HEAD~1
git push -f <remote> <branch>

(示例:git push -f origin bugfix/bug123)

这将撤消上一次提交,并将更新后的历史推到远程。您需要传递-f,因为您要替换远程中的上游历史记录。

编辑:

请注意——hard将使你的提交不可达(即它将显示被删除,但你仍然可以git show <hash>或git log <hash> it,如果你记得它的哈希)。如果您想保留更改,请运行:

git reset [--mixed] HEAD~1

此时,您有了未分阶段的更改,因为您使用了—mixed,这是默认值。

你可能首先想要更新远程树(即删除提交):git push -f <remote> <branch>

由于您在本地仍然有您的更改,您可以创建另一个分支并将它们提交到那里(并在您认为合适的时候推送)。

另外:

git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master

强制将源远程存储库的主分支转移到上一次提交的父分支

使用git reset——hard HEAD~1,就像大多数人建议的那样,会在本地撤销上次提交,但你也会失去那些本地更改。

如果你不想丢失本地更改,而只是撤销上次提交:

git reset HEAD~1

然后强制将其推到原点以撤销远程中的提交(假设<remote> == origin)

git push -f origin <branch>

一般来说,执行“反向”提交,使用:

git revert 364705c

然后像往常一样发送到遥控器:

git push

这不会删除提交:它会做出一个额外的提交,撤销第一次提交所做的一切。其他任何东西,都不是真正安全的,特别是当更改已经传播时。