撤消'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?