我可以撤消上一次git推送吗?

Str*_*ray 35 git

昨晚,一名团队成员在匆忙中不小心将半个不必要的拉链推到了远程仓库.是的...哎呀.

从那以后,没有人拉过或做过.

理想情况下,我想"撤消"发生的事情.

我看过filter-branch,正在考虑尝试类似的东西

git filter-branch --tree-filter 'rm -f *.zip' HEAD
Run Code Online (Sandbox Code Playgroud)

但这将是本地的,我无法弄清楚如何直接在远程回购上做.

是否有更简单的方法来撤消发生的事情?如果她修改了她的最后一次提交并再次推送将撤消推送 - 即实际上从历史记录中删除这些文件?

显然,如果她删除它们,再次提交和推送,那么仍然会将内容留在回购中,这是不好的.

Str*_*ray 54

谢谢唐,我已经看到了,但不知何故没有意识到它解决了我的问题,因为我只有一个分支.

我做了:

git push -f origin 5910117a8fc2c71334251465b54d6d9daeb28d1c:master
Run Code Online (Sandbox Code Playgroud)

而这一切都回到了原来的样子.

  • 澄清:sha hash应该是最后一次GOOD提交的哈希 - 而不是你的错误提交推送 (12认同)
  • 您可能需要添加:git reset --hard 5910117a8fc2c71334251465b54d6d9daeb28d1c这将确保您的本地副本也恢复为该特定版本(否则,您的本地仓库似乎与远程版本不同). (7认同)
  • 只是为了这个答案的完整性,您应该指定,为了获得最后一次提交哈希,必须执行“git log”。不过,答案很方便。 (2认同)

mic*_*hid 5

我认为

git reset --hard HEAD^
git push -f
Run Code Online (Sandbox Code Playgroud)

应该诀窍:它将您的本地签出重置为先前的提交(假设最后一个是您要删除的那个)并强制将其推送到远程存储库.