好的,所以我在家工作,使用2台带遥控器的电脑工作。
当我今天回到家时,我的家用电脑在工作电脑后面2天了,我做了一个
git push origin master
意外地搞砸了远程仓库(新克隆的代码现已损坏)。
我已经看到this question接受的答案,他提到了最后一个好的代码。
我的问题是,如果我想要的最后一个好的副本在工作而且我在家,我如何撤消我的更改?我不能告诉远程服务器撤消上次推送的更改吗?
答案 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
,它应该让你弄清楚你要回去的提交。最近的变化位于底部。