我能否撤销最近一次的git push?

36

一位团队成员昨晚匆忙之中不小心将半个GB的不必要的压缩文件推到了远程仓库。是的...糟糕。

自那以后,没有人进行过拉取或提交操作。

理想情况下,我希望只是“撤销”所发生的事情。

我已经看过filter-branch,并考虑尝试类似下面的操作:

git filter-branch --tree-filter 'rm -f *.zip' HEAD

但那只会在本地有效,我无法想出如何直接在远程仓库上操作。

有没有更简单的方法来撤消所发生的事情?如果她修改了最后一次提交并再次推送,那么这会撤消推送 - 也就是从历史记录中实际删除这些文件吗?

显然,如果她删除它们、提交并再次推送,那仍然会将内容留在仓库中,这是不好的。


这里可能有类似的问题可以帮到您:https://dev59.com/L3M_5IYBdhLWcg3wslVW - Don
2个回答

55

感谢Don的回答,我之前看到过这个但是不知道它可以解决我的问题,因为我只有一个分支。

我尝试了:

git push -f origin 5910117a8fc2c71334251465b54d6d9daeb28d1c:master

现在一切都回到了原来的状态。


那很好。你可能需要花点时间考虑让有权限访问存储库的任何人都能够做到这一点是否好或不好 :) 直接访问远程存储库并使用git reset来移动其主分支是另一种替代方案,通常可以绕过钩子中实现的任何权限检查。 - araqnid
7
你可能希望添加: git reset --hard 5910117a8fc2c71334251465b54d6d9daeb28d1c这将确保你的本地副本也被还原为该特定版本(否则,你的本地仓库看起来会与远程不同)。 - Chris R
12
澄清:sha哈希值应该是最新的好的提交 - 而不是你推送的坏的提交。 - philfreo
2
为了完整起见,您应该指定要执行 git log 以获取最后提交的哈希值。尽管如此,这是一个相当方便的答案。 - Yanick Rochon

7

我认为

git reset --hard HEAD^
git push -f

这应该可以解决问题:它将您本地的检查点重置为上一个提交(假设您要删除的是最后一个提交),并强制将其推送到远程存储库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接