关于git:在没有良好初始提交的情况下擦除远程分支历史记录


Wiping a remote branch history without a good initial commit

我有两个本地回购:a-public-projecttop-secret,在对两个本地回购进行了多次承诺之后,我在Github上创建了一个新的空回购,它将是a-public-project的远程,但是我意外地推了top-secret

1
2
3
cd C:/Git/top-secret
git remote add github https://github.com/me/a-public-project.git
git push -u github master

在恐慌模式下,我在网上搜索并发现了以下结果:

  • 撤消"Git Push"
  • git:从远程分支永久删除少量提交
  • 有没有办法把我最后一次推到Git上?
  • http://christoph.ruegg.name/blog/git-howto-revert-a-commit-already-push-to-a-remote-reposit.htmlbranch

不幸的是,所有这些都涉及到重置本地分支和执行git push --force:这假设有一个好的故意承诺,我可以回滚到。在这种情况下,我不会-整个回购历史是坏的,远程回购需要删除其历史(但我的本地回购历史显然没有受到影响)。

幸运的是,在这个特定的例子中,我可以使用github网站删除回购,然后推送正确的本地回购,但是如果我不控制的回购再次发生这种情况,我应该怎么做?


一种快速恢复的方法是从远程删除主分支

1
git push github :master

或者你可以快速跳到a-public-project上,强制它覆盖

1
2
3
cd C:/Git/a-public-project
git remote add github https://github.com/me/a-public-project.git
git push -u github master --force