将 Git 存储库恢复为之前的提交
本文概述了如何将 Git 存储库恢复到以前的提交。 这是我们将介绍的三种方法。
- 暂时回滚到之前的提交
- 删除未发布的提交
- 撤消已发布的提交
暂时回滚到以前的提交
我们的第一个方法涉及使用 git checkout 命令。
这将允许我们回到之前的 Git 提交,而无需重写我们分支中的提交历史。 这是一个例子。
假设这是我们的提交历史,我们如何回到三个提交? (即 HEAD~3)
我们可以运行 git checkout
命令,如下图所示。
$ git checkout HEAD~3
如上所示,我们目前处于分离模式。 我们可以在不影响任何分支的情况下进行更改、试验和提交更改。
在分离 HEAD 模式下要小心,因为您可能会丢失所做的更改。 要保留这些更改,请创建一个新分支,如下所示。
$ git checkout -b Detached
您可以随意命名您的分支机构。
删除未发布的提交
未发布的更改只是您尚未推送到远程存储库的提交。
您可以使用 git reset 命令删除提交以将本地存储库回滚到以前的状态。 这是一个例子。
如果我们想硬删除我们在上一节中讨论的三个提交而不是临时切换怎么办? 我们将如何着手?
我们将运行 git reset
命令来硬删除这三个提交,如下所示。
$ git reset --hard HEAD~3
上面的命令将取消三个提交和任何未提交的更改。 如果要保留未提交的更改,请确保运行 git stash 命令。
请注意
,仅当您尚未将更改推送到远程存储库时才应使用此方法,尤其是当它是共享存储库时。
撤消已发布的提交
在上面的部分中,我们已经了解了如何删除未发布的提交。 如果您已经将提交推送到远程存储库怎么办?
git reset --hard
命令具有破坏性,可能会打乱项目的时间表,因为多个开发人员正在处理同一个项目。
撤消已发布提交的最安全方法是使用 git revert 命令。 这不会重写提交历史但会还原它并创建一个新的提交。
这将使其他开发人员更容易理解正在发生的事情。
要还原三个提交,我们将运行:
$ git revert --no-commit HEAD~3..HEAD
--no-commit 标志将允许我们为所有三个还原的提交创建一个提交消息。 不包含该标志将迫使您为每个提交创建一个提交消息,这看起来很乱并且会使您的存储库混乱。
简而言之,在 Git 中可以通过三种方式恢复到之前的提交。 这完全取决于您的情况下恢复的定义。
如果你想暂时切换到以前的提交,请使用 git checkout
命令。 git reset --hard
应保留用于未发布的更改,而 git revert
命令最适合已发布的提交。
相关文章
如何在 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 命令,但这很麻烦,尤其是当我们有大量不冲突的文件时。