我在本地搞砸了一些文件并将其推送到我的存储库中,当我意识到自己的错误时,我想回到旧版本。我做了一些搜索,在这里发现了一个类似的问题,所以我按照答案做了以下操作:
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
在那之后你应该能够推动。