在 Git 的仓库中恢复到以前的提交

Azhar Bashir Khan 2023年1月30日 2022年4月22日
  1. 使用 git reset 重置到 Git 仓库中的先前提交
  2. 使用 git revert 恢复到 Git 仓库中的先前提交
在 Git 的仓库中恢复到以前的提交

在本教程中,我们将学习如何在 Git 的仓库中恢复到以前的提交。

Git 是一个版本控制系统,用于协作开发环境中以跟踪对文件所做的更改。

Git 用于捕获项目目录中文件更改的快照,并将它们与提交相关联。

在 Git 中,使用提交可以浏览和查看对文件所做更改的历史记录。

我们还可以使用 Git 将 Git 仓库中项目目录的文件重置或恢复到先前的提交(即)在创建提交时目录中文件的状态。

我们现在将用一个例子来说明这一点。

使用 git reset 重置到 Git 仓库中的先前提交

在协作开发环境中,我们使用 Git 来跟踪对 Git 仓库中项目目录中的文件所做的更改。

当我们创建一个提交来保存我们的工作时,Git 会创建一个唯一的 ID(也称为 SHA哈希),它允许我们记录提交的特定更改以及提交的人员和时间。

提交是对文件(或文件集)的单独更改。提交通常包含提交消息,该消息是对所做更改的简要描述。

有时,我们可能需要将项目目录的仓库恢复或重置为以前的提交。

假设我们有以下提交,如我们的仓库中的 git log 命令所示。

$ git log --oneline
e4cd6b4 (HEAD -> main, origin/main) my change
99541ed second change
41f1f2a first change
...

现在,假设我们要将仓库重置为 SHA 41f1f2a 给出的先前提交,并带有注释 first change

一种方法是使用 git checkout 命令临时切换到上一个提交。

因此,我们将执行以下操作。

$ git checkout 41f1f2a

我们还可以使用之前的提交创建一个新分支,这样我们就可以在该分支中提交新的更改。

因此,我们将执行以下操作。

$ git checkout -b first-change-branch 41f1f2a

相反,如果我们想放弃自上次提交以来的更改,我们将使用 git reset 命令。

将仓库重置回之前提交的 git reset 命令的语法是 git reset -hard <commit-sha-id>

因此,在我们的案例中,我们将执行以下操作。

$ git reset --hard 41f1f2a

请注意谨慎使用;这也将丢弃任何本地修改。任何未提交的更改都将丢失。

或者,我们可以在重置之前存储更改,如下所示。

$ git stash
$ git reset --hard 41f1f2a
$ git stash pop

执行上述命令后,本地修改保存在 stash 中;然后,在重置为上一次提交后,这些修改将重新应用于仓库。

使用 git revert 恢复到 Git 仓库中的先前提交

当我们想要保留仓库的历史记录时,使用 git revert 命令。

执行命令 git revert 后,Git 会创建一个带有反向补丁的提交以使之前的提交无效。这样,我们就不会重写任何历史。

将仓库恢复到以前的提交的 git revert 命令的语法是 git reset <commit-sha-id1> <commit-sha-id2> ...

因此,我们想要恢复前两个提交以将仓库恢复为 SHA 41f1f2a 给出的提交。

$ git revert e4cd6b4 99541ed

它将通过给定的两个提交恢复仓库。

我们也可以如下执行 git revert 命令。

$ git revert HEAD~2..HEAD

上面的 git revert 命令将恢复最后两次提交。

最后,如前所述,git revert 命令创建一个提交以取消先前的提交。因此,我们现在需要保存这个提交。

我们需要做如下。

$ git commit -m "reverted commits e4cd6b4 99541ed"

因此,现在提交的还原现在作为新提交保存在仓库中。

在某些情况下,存在合并提交,我们可能也想恢复它。

我们可以使用带有选项 -m parent-numbergit revert 命令;此选项指定主线的父级编号(从 1 开始),并允许 revert 反转相对于指定父级的更改。

合并提交有多个父级。git revert 命令需要额外的信息来决定合并的哪个父级应被视为主线。

该命令的语法是,git revert -m 1 <commit-sha-id>1 用于作为主线的第一个父级。

因此,假设提交 SHA e4cd6b4 是合并提交。然后我们可以如下操作。

$ git revert -m 1 e4cd6b4

因此,我们详细说明了如何在 Git 中恢复到仓库中的先前提交。

欲了解更多信息,请访问下方。

  1. git-reset
  2. git-revert

相关文章 - Git Reset

相关文章 - Git Revert