通过提交 ID 恢复 Git 仓库

本文将讨论基于提交 ID 还原 Git 仓库。我们可能需要回到较旧的提交以检查其状态或删除之后的提交。

让我们讨论这两种情况。

临时切换到 Git 提交

我们使用 git checkout 命令临时切换到较旧的提交,同时提及提交 ID。

$ git checkout <Commit ID>

此命令将分离我们的 repo 的 HEAD(我们没有在分支上签出)。在这种状态下,我们无法提交。

如下所示,我们必须根据提交创建一个新的分支。

$ git switch -c <new-branch-name>

我们可以结合上面的命令来做同样的事情,如下所示。

$ git checkout -b <new-branch-name> <Commit ID>

通过提交 ID 恢复 Git 仓库

我们使用带有 --hard 标志的 git reset 命令,同时传递我们想要回滚到的提交 ID。运行以下命令。

$ git reset --hard <Commit ID>

运行此命令将删除我们最近的所有提交,直到提到的提交。该命令还将删除索引中任何未提交的更改。

如果要保留更改,请执行以下操作:

$ git stash
$ git reset --hard <Commit ID>
$ git stash pop

如果要更新远程仓库,请使用下面的 git push 命令。

$ git push -f

请小心使用此命令,因为它将根据你的本地仓库覆盖远程仓库。让我们看一个例子。

在下面的示例中,我们将尝试根据提交 id 恢复我们的 git repo Delftscopetech。让我们运行 git log 命令来列出我们 repo 中的所有提交。

$ git log --oneline

通过提交 ID 恢复 Git 仓库

如果我们想回到 Fourth Update,我们会怎么做呢?

我们在下面的上下文中运行 git reset 命令。

$ git reset --hard df90895
HEAD is now at df90895 Fourth Update

输出显示我们的 HEAD 现在处于 Fourth Update。我们可以运行 git push 命令将更改推送到我们的远程仓库。

如果要撤消重置,请按照此操作。

首先,我们运行 git reflog 命令来查看我们 repo 中的所有参考更新。

$ git reflog

通过提交 ID 恢复 Git 仓库

你的输出看起来很相似。我们可以在 HEAD@{0} 看到我们的重置。

要返回,我们运行 git reset 命令,如下所示。

$ git reset HEAD@{1}

现在让我们检查一下我们的提交历史。

$ git log --oneline

通过提交 ID 恢复 Git 仓库

我们的 HEAD 又回到了第六次更新

简而言之,根据提交 ID 恢复你的 Git 仓库非常容易。如果你想暂时切换到提交,请使用 git checkout 命令。

要恢复到特定的提交,请使用 git reset --hard 命令并指明提交哈希。