在 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-number
的 git revert
命令;此选项指定主线的父级编号(从 1 开始),并允许 revert 反转相对于指定父级的更改。
合并提交有多个父级。git revert
命令需要额外的信息来决定合并的哪个父级应被视为主线。
该命令的语法是,git revert -m 1 <commit-sha-id>
,1
用于作为主线的第一个父级。
因此,假设提交 SHA e4cd6b4
是合并提交。然后我们可以如下操作。
$ git revert -m 1 e4cd6b4
因此,我们详细说明了如何在 Git 中恢复到仓库中的先前提交。
欲了解更多信息,请访问下方。
相关文章
如何在 Windows 系统中卸载 git
发布时间:2023/04/09 浏览次数:223 分类:Git
-
在这篇简短的文章中,我们将学习如何卸载 Git,以及如何在从个人计算机的目录中卸载 Git 后删除这些文件。
Git 如何重命名本地分支
发布时间:2023/04/09 浏览次数:64 分类:Git
-
大多数情况下,重命名分支机构是由于上述情况。 因此,在本教程中,我们将学习使用下面提到的技术更改本地 Git 分支的名称。
重命名 Git 存储库中的文件和目录
发布时间:2023/04/09 浏览次数:102 分类:Git
-
在本文中,我们将讨论 git 中的重命名过程。 我们使用 Git Rename 来更改工作目录中文件和文件夹的名称。
在 Git 中取消初始化存储库
发布时间:2023/04/09 浏览次数:187 分类:Git
-
本本文介绍如何通过 Git 命令行取消初始化 Git 存储库。git init 命令开发一个新的空置 Git 存储库。 它还用于重新初始化已经存在的 Git 存储库。
Git 仓库名称该如何命名
发布时间:2023/04/09 浏览次数:208 分类:Git
-
使用 Git 时,选择一个简洁且最新的存储库名称是一项艰巨的任务。本教程介绍了如何以独特的方式命名 Git 存储库。
配置 Git 以忽略文件模式更改
发布时间:2023/04/09 浏览次数:67 分类:Git
-
本文讨论配置 Git 以忽略文件更改 chmod 所需的步骤。 如果您更改 Git 正在跟踪的文件的权限,系统将在该文件中注册更改。
在 Git 中暂存已删除的文件
发布时间:2023/04/09 浏览次数:93 分类:Git
-
本文讨论了在 Git 中暂存已删除文件的必要步骤。我们知道 rm 命令可以删除一个文件,而无需将其从工作目录中移除。 那么,我们如何暂存已删除的文件以进行提交呢?
在 Git 中显示冲突文件
发布时间:2023/04/09 浏览次数:139 分类:Git
-
本文讨论在 Git 中列出冲突文件的最简单和最干净的方法。 我们可以使用 git status 命令,但这很麻烦,尤其是当我们有大量不冲突的文件时。