撤消'git push'

这就是我在我应该稳定的分支上所做的事情......

% 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 push -f origin last_known_good_commit:branch_name

或者你的情况

git push -f origin cc4b63bebb6:alpha-0.3.0

您可能在远程存储库上设置了receive.denyNonFastForwards 。 如果是这种情况,那么你会得到一个错误,其中包括短语[remote rejected]

在这种情况下,您将不得不删除并重新创建分支。

git push origin :alpha-0.3.0
git push origin cc4b63bebb6:refs/heads/alpha-0.3.0

如果这不起作用 - 也许是因为你有receive.denyDeletes设置,那么你必须直接访问存储库。 在远程存储库中,您必须执行类似以下管道命令的操作。

git update-ref refs/heads/alpha-0.3.0 cc4b63bebb6 83c9191dea8

我相信你也可以这样做:

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

这与最后一种方法非常相似,除非您不必在远程回购中混淆。


git revert比这里建议的一些方法更不危险:

prompt> git revert 35f6af6f77f116ef922e3d75bc80a4a466f92650
[master 71738a9] Revert "Issue #482 - Fixed bug."
 4 files changed, 30 insertions(+), 42 deletions(-)
prompt> git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
prompt>

将35f6af6f77f116ef922e3d75bc80a4a466f92650替换为您自己的提交。

链接地址: http://www.djcxy.com/p/4041.html

上一篇: Undoing a 'git push'

下一篇: Can you explain what "git reset" does in plain english?