在Git中覆盖了我的整个回购,我似乎无法回到之前的提交

时间:2013-09-28 17:45:49

标签: git github repository

我在本地弄乱了一些文件并把它们推到了我的仓库,当我意识到自己的错误时,我想回到旧版本。我做了一些搜索并在这里找到了类似的问题,所以我按照答案做了以下事情:

git log
git reset --hard <hash>
git push -f origin master

现在,我正在为我的大学使用github,之前我已将解决方案从教授回购中删除。我猜我选择了教授解决方案哈希,当我运行git reset --hard因为我的回购现在说它是由教授创作的,它有所有旧的解决方案文件,而不是我自己的文件。一切都在本地被替换,git log仅显示教授对解决方案回购的承诺。有什么方法可以回复我的以前的提交吗?

1 个答案:

答案 0 :(得分:3)

您可以使用git reflog在硬重置之前返回。

运行git reflog将产生如下内容:

f735139 HEAD@{0}: reset: moving to HEAD~1
a76edca HEAD@{1}: commit: second commit
f735139 HEAD@{2}: commit (initial): initial commit

您可以在重置之前检查提交,如下所示:

git checkout HEAD@{1}

您将收到一个分离头警告,因此在重置之前创建一个新分支:

git checkout -b <new branch name>

现在,在硬重置之前,您将拥有一个包含所有内容的分支。

如果您确实希望将来回到过去,我会在您重置的提交中创建一个新分支。你可以这样做:

git checkout <sha-1 hash of the commit you reset to>
git checkout -b <new branch name>

这样你就可以单独留下你的主分支,并在更早的时候有一个新的分支。


编辑:由于你想合并撤销推送重置的更改到master,我建议合并远程更改并丢弃它们。试试这个:

git fetch origin master
git merge FETCH_HEAD -s ours

之后你应该能够推动。