用Git重写我的整个回购协议,我可以';I don’我好像再也回不到以前的承诺了

用Git重写我的整个回购协议,我可以';I don’我好像再也回不到以前的承诺了,git,github,repository,Git,Github,Repository,我在本地弄乱了一些文件,并将它们推送到我的回购协议,当我意识到我的错误时,我想回到旧版本。我做了一些搜索,在这里发现了一个类似的问题,所以我按照答案做了如下操作: git log git reset --hard <hash> git push -f origin master git日志 git重置——硬 git-push-f源主机 现在,我正在为我的大学使用github,早些时候,我从Professors repo中找到了一份旧作业的解决方案。当我运行git reset--h

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

git log
git reset --hard <hash>
git push -f origin master
git日志
git重置——硬
git-push-f源主机

现在,我正在为我的大学使用github,早些时候,我从Professors repo中找到了一份旧作业的解决方案。当我运行git reset--hard时,我猜我选择了professor解决方案哈希,因为我的repo现在说它是由professor编写的,它有所有旧的解决方案文件,没有我自己的文件。所有内容都在本地进行了替换,
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}
您可以在重置之前签出提交,如下所示:

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 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}
您可以在重置之前签出提交,如下所示:

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>

在那之后你应该可以推

谢谢!成功了!但是如何在我的主分支中显示提交?现在它们在新创建的分支中。@Amru您可以将新分支合并到主分支中,并将其推送。最好避免在已经推送到其他地方的提交上进行重置等操作。如果可能的话,在本地存储库上执行这些操作并推送最终结果。我做了
git checkout master
,然后是
git merge newbranch
,现在推送master时,我得到以下错误:
![已拒绝]主控->主控(非快进)错误:无法将某些引用推送到'git@github.com:abcd-fall2013-cs123/amrue.git“为防止丢失历史记录,拒绝了非快进更新并合并远程更改(例如“git pull”)再次按下之前。
但我不想拉远程更改,因为有相似的文件名,我不想让它们覆盖我的文件。@Amru我认为最好的办法是拉更改并放弃它们。我编辑了我的答案,并说明了如何做。我最终使用的是另一个答案的
git push origin+master
。只有一个人参与回购,所以情况应该不会太糟。谢谢你所做的一切!一切正常,谢谢!成功了!但是如何在我的主分支中显示提交?现在它们在新创建的分支中。@Amru您可以将新分支合并到主分支中,并将其推送。最好避免在已经推送到其他地方的提交上进行重置等操作。如果可能的话,在本地存储库上执行这些操作并推送最终结果。我做了
git checkout master
,然后是
git merge newbranch
,现在推送master时,我得到以下错误:
![已拒绝]主控->主控(非快进)错误:无法将某些引用推送到'git@github.com:abcd-fall2013-cs123/amrue.git“为防止丢失历史记录,拒绝了非快进更新并合并远程更改(例如“git pull”)再次按下之前。
但我不想拉远程更改,因为有相似的文件名,我不想让它们覆盖我的文件。@Amru我认为最好的办法是拉更改并放弃它们。我编辑了我的答案,并说明了如何做。我最终使用的是另一个答案的
git push origin+master
。只有一个人参与回购,所以情况应该不会太糟。谢谢你所做的一切!一切正常。