在GitHub上,是否有可能撤销一次git push --force的操作?

6
我执行了一个git push --force,本以为只会推送当前分支,但实际上它推送了所有分支。真正的损害只发生在我已经很久没有拉取的几个同事的分支上,因此通过这种方式(由--force启用),我完全重置了自从我上次拉取以来所做的所有提交。
如果不想去找我的同事请求他们将最新的本地分支推送到GitHub来撤销我所做的损害,那么有什么办法可以撤销它吗?我所做的不幸等同于git reset --hard,意味着我摧毁了所有自那时以来的提交。是否有一种方法可以撤消它?

哎呀,我没有对此的答案,但是作为建议,您可以通过使用 push.default 设置(例如,将其设置为“current”,“upstream”或“simple”)来更改 Git 的行为。 - helmbert
1个回答

3

不行。如果你在本地库中没有旧提交,那么远程分支指向的提交,你就没办法了。GitHub 没有提供这个功能。

你需要请求同事再次强制推送他们的分支以恢复之前的状态。

如果一个简单的 git push 更新了所有分支,那么你可能需要检查你的 push.default 配置。我建议选择 simpleupstream 以避免错误。

希望这让你以后避免强制推送任何东西 ;) 这是危险的,现在你已经体验到为什么了。如果你想要更多安全保障,可以在将来使用 git push --force-with-lease。这样,如果你的远程分支与实际远程分支的状态不匹配,Git 就不会强制推送任何东西。所以如果你很久没有拉取过代码,就无法进行强制推送。它不能防止你犯所有的错误,但或许可以减少一些。在这种情况下,它将允许你还原原始状态(因为它要求你在本地库中具有远程库的状态,从而可以回退)。


10
其实,我能够做到:git reset --hard origin/remotebranch@{1} - amphibient
2
@amphibient 但这只允许您恢复到该远程分支的旧版本。如果您最近没有获取,那么该版本仍然过时。 - poke
1
它是从遥控器上重置,而不是本地。 - amphibient
这对我也起作用了。我怀疑是因为之前的git fetch已经将它们拉下来了。 - Nathan Lee
1
这是不正确的。GitHub 仍将拥有旧版本的哈希值,即使您在本地 reflog 中没有该哈希值,您也可以从 GitHub 获取它。请参阅此问题的重复标记。 - mikemaccana
1
@amphibient 你真的救了我的命/保持心智,非常感谢 :) :) - S..

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