使用硬重置撤销已推送的不需要的 Git 提交

GitBeginner
立即练习

简介

在本教程中,我们将探讨如何撤销已经推送到远程仓库的不必要的 Git 提交。通过理解 Git 提交的概念并使用硬重置方法,你将学习如何安全地撤销有问题的提交并保持提交历史的整洁。

理解 Git 提交

Git 是一个分布式版本控制系统,它允许开发者跟踪代码库中的更改、与他人协作以及管理项目历史记录。Git 的核心是提交,它代表项目在特定时间点的快照。

Git 中的每个提交都有一个唯一标识符,称为提交哈希,它是一串唯一标识该提交的字符。提交按线性顺序链接在一起,形成一个提交历史记录

当你对项目进行更改并想要保存这些更改时,你会创建一个新的提交。这个提交包括你所做的更改,以及诸如作者、日期和描述这些更改的提交消息等元数据。

graph LR A[初始提交] --> B[第二次提交] B --> C[第三次提交] C --> D[第四次提交]

上图展示了一个简单的 Git 提交历史记录,其中每个提交由一个节点表示,箭头表示提交的时间顺序。

理解 Git 中的提交概念很重要,因为它们构成了你将执行的许多版本控制操作(如撤销不需要的更改)的基础。

识别不需要的提交

在项目过程中,你有时可能会引入想要撤销的不需要的更改或提交。识别这些不需要的提交是撤销过程的第一步。

你可以使用 git log 命令查看仓库的提交历史记录。这将显示所有提交的列表,包括提交哈希、作者、日期和提交消息。

[object Object]

通过查看提交历史记录,你可以识别出想要撤销的特定提交。记录下不需要的提交的提交哈希。

或者,你可以使用 git reflog 命令查看仓库更详细的历史记录,包括可能已经做出然后又撤销的任何更改。这有助于识别你想要撤销的特定提交。

$ git reflog
1234567 HEAD@{0}: commit: 实现新功能
0987654 HEAD@{1}: commit: 修复上一次提交中的错误
fedcba0 HEAD@{2}: commit (初始): 初始提交

一旦你识别出不需要的提交,就可以进入撤销它们的下一步。

使用硬重置撤销提交

一旦你识别出不需要的提交,就可以使用 git reset 命令来撤销它们。git reset 命令允许你将当前分支指针移动到特定的提交,从而有效地撤销该提交之后引入的任何更改。

当你想要完全丢弃特定提交之后所做的任何更改时,git reset--hard 选项特别有用。这被称为“硬重置”。

以下是如何使用 git reset --hard 来撤销不需要的提交:

  1. 使用 git loggit reflog 识别不需要的提交的提交哈希。

  2. 运行以下命令来撤销提交:

    git reset --hard <提交哈希>

    <提交哈希> 替换为不需要的提交的提交哈希。

  3. 运行该命令后,你的工作目录和仓库将被重置为指定提交的状态。该提交之后引入的任何更改都将被完全丢弃。

graph LR A[初始提交] --> B[第二次提交] B --> C[第三次提交(不需要的)] C --> D[第四次提交] D --> E[第五次提交] E --> F[第六次提交] F --> G[第七次提交] G --> H[第八次提交] H --> I[第九次提交] I --> J[第十次提交] J --> K[第十一次提交] K --> L[第十二次提交] L --> M[第十三次提交] M --> N[第十四次提交] N --> O[第十五次提交] O --> P[第十六次提交] P --> Q[第十七次提交] Q --> R[第十八次提交] R --> S[第十九次提交] S --> T[第二十次提交] T --> U[第二十一次提交] U --> V[第二十二次提交] V --> W[第二十三次提交] W --> X[第二十四次提交] X --> Y[第二十五次提交] Y --> Z[第二十六次提交] Z --> AA[第二十七次提交] AA --> BB[第二十八次提交] BB --> CC[第二十九次提交] CC --> DD[第三十次提交] DD --> EE[第三十一次提交] EE --> FF[第三十二次提交] FF --> GG[第三十三次提交(恢复到)]

在上面的图中,不需要的提交是“第三次提交(不需要的)”。通过使用 git reset --hard <提交哈希>,其中 <提交哈希> 是“第三十三次提交(恢复到)”的哈希,该点之后的所有提交都将被丢弃,从而有效地将仓库恢复到指定提交的状态。

需要注意的是,git reset 中的 --hard 选项是一个破坏性操作,因为它将永久丢弃指定提交之后引入的任何更改。因此,只有在你确定要完全撤销更改并丢失不需要的提交之后所做的任何工作时,才应使用此命令。

总结

本教程提供了一份全面指南,介绍了如何使用硬重置方法撤销已推送到远程仓库的不需要的 Git 提交。通过理解 Git 提交的概念、识别有问题的提交并应用硬重置技术,你可以在基于 Git 的项目中有效地撤销并保持提交历史的整洁。