这是我在我应该稳定的树枝上做的事情……

% git rebase master
First, rewinding head to replay your work on top of it...
Fast-forwarded alpha-0.3.0 to master.
% git status
# On branch alpha-0.3.0
# Your branch is ahead of 'origin/alpha-0.3.0' by 53 commits.
#
nothing to commit (working directory clean)
% git push
Fetching remote heads...
  refs/
  refs/heads/
  refs/tags/
  refs/remotes/
'refs/heads/master': up-to-date
updating 'refs/heads/alpha-0.3.0'
  from cc4b63bebb6e6dd04407f8788938244b78c50285
  to   83c9191dea88d146400853af5eb7555f252001b0
    done
'refs/heads/unstable': up-to-date
Updating remote server info

我后来意识到,这完全是一个错误。我想撤消整个过程,并将alpha-0.3.0分支恢复到原来的样子。

我该怎么办?


当前回答

如果你想忽略你刚刚在远程分支中推送的最后一个提交:这不会删除提交,而是通过将git指针移动到之前的提交(由HEAD^或HEAD^1引用)来忽略它

git push origin +HEAD^:branch

但是如果您已经推动了这个提交,而其他人已经拉动了这个分支。在这种情况下,重写分支的历史记录是不可取的,你应该转而恢复这个提交:

git revert <SHA-1>
git push origin branch

其他回答

我相信你也可以这样做:

git checkout alpha-0.3.0
git reset --hard cc4b63bebb6
git push origin +alpha-0.3.0

这与最后一个方法非常相似,只是您不必在远程回购中浪费时间。

如果你想忽略你刚刚在远程分支中推送的最后一个提交:这不会删除提交,而是通过将git指针移动到之前的提交(由HEAD^或HEAD^1引用)来忽略它

git push origin +HEAD^:branch

但是如果您已经推动了这个提交,而其他人已经拉动了这个分支。在这种情况下,重写分支的历史记录是不可取的,你应该转而恢复这个提交:

git revert <SHA-1>
git push origin branch

现有的答案是正确的,但是如果你需要撤消推送,但是:

您希望将提交保存在本地,或者保留未提交的更改 你不知道你刚刚推送了多少提交

使用此命令将更改还原为ref:

git push -f origin refs/remotes/origin/<branch>@{1}:<branch>

我也有同样的问题。我只是复制了我想要恢复的最后一个提交id(af12de…)。然后执行以下命令 Git回复af12de....然后将我的更改推送到主服务器。这对我很有效

git push origin +7f6d03:master

这将恢复您的回购到提到的提交编号