如何在git中恢复到旧版本

如何在git中恢复到旧版本,git,github,Git,Github,在github上,我们位于commit 57d7cb274622f86e586c2595317264f23626e6c5 我想恢复到提交5798ee7c56efd7e898d3115da6efe3d5e7cddb6c,这是最新提交之前的几个提交。以下是我正在做的: $ git fetch origin $ git reset --hard origin/master Head is now at 57d7cb274 $ git status nothing to commit (working

在github上,我们位于commit 57d7cb274622f86e586c2595317264f23626e6c5 我想恢复到提交5798ee7c56efd7e898d3115da6efe3d5e7cddb6c,这是最新提交之前的几个提交。以下是我正在做的:

$ git fetch origin
$ git reset --hard origin/master
Head is now at  57d7cb274
$ git status
nothing to commit (working directory clean)
$git revert 5798ee7c56efd7e898d3115da6efe3d5e7cddb6c
#On branch master
nothing to commit (working directory clean)
$ git status
#On branch master
nothing to commit (working directory clean)
但结果代码实际上并不在5798ee7c56efd7e898d3115da6efe3d5e7cddb6c的提交位置
我遗漏了什么?

根据git at的文档,git revert创建的提交会反转指定的提交

因此,
git status
说在运行git revert之后没有什么要提交的原因是您正在寻找的更改已经提交了


我认为您试图实现的目标已经完成,但您的测试是否有效是有缺陷的。

您混淆了
git revert
git reset

使用git reset
git reset
时,您实际上会丢弃所有这些提交,并得到与给定提交完全相同的结果

但是
git revert
实际上将添加另一个提交,该提交与原始提交完全相反,因此会还原该提交

使用
git reset
对您的本地存储库来说很好,但是一旦您推送了提交,其他人可能已经开始为自己的工作使用这些提交。因此,在这种情况下,您需要显式的恢复提交


请注意,如果要进行还原,则需要还原每个不需要的提交。

git status
不说任何要提交的内容并不意味着提交不会回滚。同意Brandon(+1)。请注意,您还可以(现在可以)执行
git checkout filename
来重置单个文件(filename)。命令语法,就像许多git一样,对某些人来说是不明显的。