在 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 中恢复到仓库中的先前提交。
欲了解更多信息,请访问下方。