小编典典

将远程重置为某个提交

all

我想放弃 commit 之后所做的所有更改<commit-hash>。所以我做了:

git reset --hard <commit-hash>

现在我想对我的遥控器做同样的事情。我怎样才能做到这一点?之后我做了一些提交(和推送)<commit-hash>,我只想将它们全部丢弃。只是出现了
严重 错误,我不想让它变得比现在更糟。;(

我基本上想origin/master倒带<commit-hash>


阅读 111

收藏
2022-03-01

共1个答案

小编典典

假设您的分支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.

故障排除:

如果您收到类似“ ! [remote denied] a60f7d85 - > master (pre-receive hook denied)
”之类的消息

那么你必须允许特定分支的分支历史重写。例如,在 BitBucket 中,它说“不允许重写分支历史记录”。有一个名为Allow rewriting branch history您必须检查的复选框。

2022-03-01