在 Git 中恢复合并提交
有时,我们需要合并两个或多个分支,然后将提交推送到所需的分支。但是后来我们意识到我们不需要在那个仓库中进行合并,所以这里的问题是如何撤消或恢复已经推送的合并提交。没什么可担心的。对于这个问题,Git 有一个很好的解决方案,我们将在下面讨论。
根据问题的不同,有两种处理这种情况的方法;一种是它尚未推送到仓库但已提交。另一个是它被提交并推送到仓库中。下面讨论了这两种情况:
撤销未推送的 Git 提交
直接在 Git 中恢复提交是不可能的。尽管如此,我们需要在恢复之前检查提交。还原后,现在工作目录的位置与我们推送提交之前的工作目录位置相同。
我们现在可以应用 git reset
命令将索引指针移回它的位置,即提交之前的位置。例如,如果我们想保留提交 Commit1
和 Commite3
的更改,但恢复提交 Commit2
的更改,请执行此命令。
git reset HEAD~3
此命令会将索引指针返回到提交 Commit2
之前的位置。还原提交后,我们需要再次将更改的文件添加到工作目录。例如,执行以下命令:
git checkout Commit1
git add Commit1
git checkout Commit3
git add Commit3
git commit
之后,我们可以将提交 Commit1
和 Commit3
推送到远程仓库。
git push
如果我们想合并两个分支,然后恢复一个分支的更改,我们可以使用以下命令:
git merge --abort
该命令用于取消合并过程。之后,我们可以将更改还原到分支。如果我们想撤销最后一次提交或多次提交的影响,本节讨论的命令很有用。
但是,如果我们想撤销最后两次或更多次提交的影响,我们需要将工作目录重置为最后一次提交之前的状态。这是因为不可能直接恢复一个或多个提交。
恢复已推送的 Git 提交
在另一种情况下,如果我们已经将合并提交推送到远程分支并且也推送了它,我们必须进行一个新的提交来恢复更改。我们将执行以下命令:
git revert -m 1 <merge-commit-hash>
这将开发一个新的提交,它将逆转先前合并提交的更改。但是,这个新提交也将包含原始合并提交的所有更改,因此我们需要编辑提交消息以表明这是一个还原提交。而我们提到的选项,-m 1
将告诉 Git 我们想要保留合并的分支。
revert command
不会改变工作树。它只修改索引。revert command
还具有恢复提交的原始消息的选项。在上面给出的示例中,-m
选项用于恢复提交的原始消息。revert 命令还可用于从集成提交中恢复特定文件。
当我们进行更改并决定不再希望保留该更改时,Git revert
是一个有用的工具,可以在我们的本地分支上使用。不建议在公共分支上使用。
众所周知,git revert 是完全可逆的,不可能撤销它的改变。如果我们在其分支上不是当前提交的提交上执行 git revert,我们必须非常小心,因为 git revert 将开发具有新提交 ID 的新提交。
如果我们稍后执行 git reset –hard 来恢复 git revert 所做的更改,我们还将删除创建 git revert 撤消提交的开发人员所做的更改。可以在公共分支上使用 git revert,但根据我的观点,这样做不是一个好主意。最好开发一个新分支来进行更改,然后在完成后将其合并到 master
分支中。
如果我们想在公共分支上使用 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 命令,但这很麻烦,尤其是当我们有大量不冲突的文件时。