我在本地弄乱了一些文件并把它们推到了我的仓库,当我意识到自己的错误时,我想回到旧版本。我做了一些搜索并在这里找到了类似的问题,所以我按照答案做了以下事情:
git log
git reset --hard <hash>
git push -f origin master
现在,我正在为我的大学使用github,之前我已将解决方案从教授回购中删除。我猜我选择了教授解决方案哈希,当我运行git reset --hard
因为我的回购现在说它是由教授创作的,它有所有旧的解决方案文件,而不是我自己的文件。一切都在本地被替换,git log
仅显示教授对解决方案回购的承诺。有什么方法可以回复我的以前的提交吗?
答案 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
之后你应该能够推动。