从另一台计算机上撤消git push

时间:2011-01-07 04:06:14

标签: git github

好的,所以我在家工作,使用2台带遥控器的电脑工作。

当我今天回到家时,我的家用电脑在工作电脑后面2天了,我做了一个

git push origin master

意外地搞砸了远程仓库(新克隆的代码现已损坏)。

我已经看到this question接受的答案,他提到了最后一个好的代码。

我的问题是,如果我想要的最后一个好的副本在工作而且我在家,我如何撤消我的更改?我不能告诉远程服务器撤消上次推送的更改吗?

2 个答案:

答案 0 :(得分:5)

不,您无法告诉原始仓库“撤消”最后一次远程推送的更改。如果您有权访问,可以 SSH并执行git reset --hard [revision]。然而...

如果你没有--force推送,Git没有覆盖原始存储库上的任何内容。事实上,如果你推动并且git没有拒绝它,那意味着你是最新的原始仓库中的东西。假设您从工作计算机推送到原点,然后您将不同的更改从您的家用计算机推送到原点,并且它们被接受,这将使我相信您在不同的分支上实现了它们。

为了告诉你如何摆脱这种情况,你需要确定分支和诸如此类的情况。一旦弄明白,你就可以通过让你的本地仓库处于你希望原点所在的状态(使用git reset --hard [revision])来“撤消”最后一次更改,然后你可以做git push --force来获得该状态反映在原始回购中。

但是,如果你有其他人在使用原始仓库,那么你将只想解决问题,而不是覆盖它。要做到这一点,你必须将你想要的更改合并到本地仓库,然后将它们作为新的更改提交并推送。

答案 1 :(得分:4)

您可以使用git reflog show origin/master来显示推送前origin/master分支的位置。可能有一种方法可以从git reflog命令获取更多详细信息(例如每次更改它的推送/获取的日期和时间),但我不知道它们是什么。所以你可以做cat .git/logs/refs/remotes/origin/master,它应该让你弄清楚你要回去的提交。最近的变化位于底部。