2016-01-22 44 views
1

今天发生在我们身上的一件令人尴尬的事情发生在一个新的合作伙伴已经提交了一个提交&推送并覆盖了存储库中的所有内容。使用之前的提交覆盖所有存储库

现在我需要回到灾难发生前的地步。

您可以删除对远程存储库的提交吗?

如果没有,因为我可以把一个提交(例如: 0231c10)作为主分支的头?

+0

Literaly你有一个很大的问题现在。我想提出以下解决方案。如果你还没有推出或从“灾难”回购中获取/取消。你/一些处于良好的状态,仍然拥有“正确的”储存库。因此,您可以完全删除远程设备,创建一个新的空白回购站,并将正确的回购站推送到新的远程站点。 – ckruczek

+0

[将Git回购恢复到之前的提交]可能的副本(http://stackoverflow.com/questions/4114095/revert-git-repo-to-a-previous-commit) – Ferrybig

+0

如果在该远程存储库中启用强制推送,那么检查push不是'push -f'可能会更好。 –

回答

0

您可以使用git reset --hard 0231c10,而您在master分支。

0

如果使用一个新提交覆盖存储库,那么最好使用命令git revert <hash>恢复它。随着恢复将被创建新的提交,它将恢复在提交<hash>中所做的更改。

使用这种方法,你仍然会在历史上犯下错误,但如果你没有足够的经验,这是解决这样的问题,只是因为它很容易最好的办法,否则与像git reset --hard 0231c10您需要的方法使用强制推送选项,这不是非常安全的行为,即使你已经准备好承担这种风险,你需要知道你需要让所有提交者对他们的环境不采取非常安全的行动,比如git fetch origin,然后在主分支git reset --hard origin/master

但是,如果您认为自己已经准备好在存储库中重写历史记录,那么可以使用git reset --hard 0231c10,正如在另一个答案中提出的那样。

0

通常,在已发布的回购协议中,执行git revert然后git push会更安全。还有其他的解决方案也

  1. 没有做任何更改您的本地回购,你也可以这样做git push -f origin 0231c10:master

  2. git reset --hard <revision_id_of_last_known_good_commit>git push --force

相关问题