0

我在本地弄乱了一些文件并将它们推送到我的仓库,当我意识到我的错误时想回到旧版本。我做了一些搜索,发现了一个类似的问题here,所以我按照答案做了以下操作:

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

现在,我在我的大学使用 github,之前我已经从 Professors repo 中提取了旧作业的解决方案。我猜我在运行时选择了教授解决方案哈希,git reset --hard因为我的回购现在说它是由教授创作的,它包含所有旧的解决方案文件,没有我自己的文件。一切也都在本地被替换,并且git log只显示教授对解决方案回购的承诺。有什么办法可以找回以前的提交吗

4

1 回答 1

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

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

于 2013-09-28T18:16:52.563 回答