在 Git 中覆盖了我的整个存储库,我似乎无法回到我以前的提交



我在本地搞砸了一些文件并将其推送到我的存储库中,当我意识到自己的错误时,我想回到旧版本。我做了一些搜索,在这里发现了一个类似的问题,所以我按照答案做了以下操作:

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

现在,我正在为我的大学使用 github,早些时候我已经从教授存储库中提取了旧作业的解决方案。我猜我选择了教授的解决方案哈希,当我运行git reset --hard因为我的存储库现在说它是由教授创作的,它有所有旧的解决方案文件,没有我自己的文件。所有内容也在本地替换,git log仅显示教授对解决方案存储库的提交。有什么方法可以找回以前的提交吗?

您可以使用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>

这样,您就可以不理会主分支,并在较早的时间点拥有一个新分支。


编辑:由于您要合并撤消推送重置到主中的更改,因此我建议合并远程更改并丢弃它们。试试这个:

git fetch origin master
git merge FETCH_HEAD -s ours

在那之后你应该能够推动。

最新更新