我怎么能从一个错误的git push -f起源大师中恢复?

我只是使用--force选项将错误的源代码提交给我的项目。

是否有可能恢复? 我知道所有以前的分支已被覆盖使用-f选项,所以我可能已经搞砸了我以前的修订。

Git一般不会抛弃任何东西,但是从中恢复可能仍然是棘手的。

如果你有正确的源码,那么你可以用--force选项把它推到远程。 Git不会删除任何分支,除非你告诉它。 如果你实际上已经失去了提交,那么看看这个有用的指南来恢复提交 。 如果你知道你想要提交的SHA-1,那么你可能没问题。

最好的办法是:把所有东西都备份起来,看看你的本地存储库里还有什么东西。 如果可能,请在遥控器上执行相同操作。 使用git fsck来查看是否可以恢复,最重要的是不要运行git gc

首先,除非你确实是真的,否则不要使用--force选项。

如果你知道提交哈希,很容易,只需重新创build你的分支。

 5794458...b459f069 master -> master (forced update) 

删除远程分支:

 git push origin :master 

然后使用以下命令重新创build分支:

 git checkout 5794458 git branch master git push origin master 

解决方法已经在这里提到

 # work on local master git checkout master # reset to the previous state of origin/master, as recorded by reflog git reset --hard origin/master@{1} # at this point verify that this is indeed the desired commit. # (if necessary, use git reflog to find the right one, and # git reset --hard to that one) # finally, push the master branch (and only the master branch) to the server git push -f origin master 

我做了同样的事情,而撤消最后一个推只有一个文件。 结束回到原始状态的存储库。 我使用的是Linus的git命令,因为我在Linux上拥有本地副本。 幸运的是,副本仍然完好无损。

我所做的只是(疯狂地再制作几份本地回购):

 git add . git status 

(它说,起源/主人提前68个提交,罚款…这些都是我删除的提交)

 git remote set-url origin <GIT_SSH_URL> git push 

而且一切都恢复了以前的样子,我做了有力的推动。 要记住的最重要的是不要做一个git结帐。 你被强行推后。 但最好的做法是禁用推送选项。 我再也不用它了。 学习我的课程!