通过提交 ID 恢复 Git 仓库

John Wachira 2024年2月15日
  1. 临时切换到 Git 提交
  2. 通过提交 ID 恢复 Git 仓库
通过提交 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

repo 历史

如果我们想回到 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

git reflog

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

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

$ git reset HEAD@{1}

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

$ git log --oneline

repo 历史 2

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

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

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

作者: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

相关文章 - Git Reset