我想放弃 commit 之后所做的所有更改<commit-hash>。所以我做了:
<commit-hash>
git reset --hard <commit-hash>
现在我想对我的遥控器做同样的事情。我怎样才能做到这一点?之后我做了一些提交(和推送)<commit-hash>,我只想将它们全部丢弃。只是出现了 严重 错误,我不想让它变得比现在更糟。;(
我基本上想origin/master倒带<commit-hash>
origin/master
假设您的分支master在此处和远程都被调用,并且您的远程被调用origin,您可以这样做:
master
origin
git reset --hard <commit-hash> git push -f origin master
但是,如果其他人正在使用您的远程存储库并拉取您的更改,您应该避免这样做。在这种情况下,最好还原您不想要的提交,然后正常推送。
更新: 您在下面解释说其他人已经拉取了您推送的更改,因此 最好创建一个新的提交来还原所有这些更改 。 在Jakub Nar臋bski 的这个答案中有一个很好的解释你这样做的选择。哪一个最方便取决于您想要还原多少次提交,以及哪种方法对您最有意义。
由于从您的问题中可以清楚地看出您已经习惯于git reset --hard重置master分支,因此您可能需要首先使用git reset --hard ORIG_HEAD将您的分支移回原来的位置。(与往常一样git reset --hard,请确保它git status是干净的,您在正确的分支上,并且您知道它是git reflog一种恢复明显丢失的提交的工具。)您还应该检查ORIG_HEAD指向正确的提交,使用git show ORIG_HEAD.
git reset --hard
git reset --hard ORIG_HEAD
git status
git reflog
ORIG_HEAD
git show ORIG_HEAD
故障排除:
如果您收到类似“ ! [remote denied] a60f7d85 - > master (pre-receive hook denied) ”之类的消息
那么你必须允许特定分支的分支历史重写。例如,在 BitBucket 中,它说“不允许重写分支历史记录”。有一个名为Allow rewriting branch history您必须检查的复选框。
Allow rewriting branch history