轻松几步撤销最新的 Git 提交

GitGitBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本教程中,你将学习如何轻松撤销你最近的 Git 提交。无论你是犯了错误、需要撤销更改,还是想要维护版本控制,本指南都将引导你通过几个简单的步骤来撤销你最近的提交。通过本全面教程中涵盖的 “git 撤销最新提交” 技巧,让你的项目重回正轨。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/commit("Create Commit") git/DataManagementGroup -.-> git/reset("Undo Changes") git/DataManagementGroup -.-> git/restore("Revert Files") git/BranchManagementGroup -.-> git/reflog("Log Ref Changes") git/BranchManagementGroup -.-> git/cherry_pick("Cherry Pick") git/BranchManagementGroup -.-> git/rebase("Reapply Commits") subgraph Lab Skills git/commit -.-> lab-411741{{"轻松几步撤销最新的 Git 提交"}} git/reset -.-> lab-411741{{"轻松几步撤销最新的 Git 提交"}} git/restore -.-> lab-411741{{"轻松几步撤销最新的 Git 提交"}} git/reflog -.-> lab-411741{{"轻松几步撤销最新的 Git 提交"}} git/cherry_pick -.-> lab-411741{{"轻松几步撤销最新的 Git 提交"}} git/rebase -.-> lab-411741{{"轻松几步撤销最新的 Git 提交"}} end

理解 Git 提交

Git 是一个分布式版本控制系统,它允许开发者随时间追踪其代码库中的更改。Git 的核心是提交(commit)的概念,它代表了项目在特定时间点的状态快照。

什么是 Git 提交?

Git 提交是对仓库中一个或多个文件所做更改的集合。当你创建一个提交时,Git 会记录以下信息:

  1. 作者:做出更改的人。
  2. 时间戳:进行更改的日期和时间。
  3. 提交消息:对提交中所做更改的简要描述。
  4. 差异:对文件所做的实际更改,包括添加、修改和删除。

每个提交都被分配一个唯一标识符,称为提交哈希(commit hash),它是一长串字母和数字。这个哈希作为提交时项目特定状态的唯一引用。

提交的结构

一个 Git 提交可以可视化为链表中的一个节点,其中每个节点代表项目的一个特定状态。提交通过父子关系相互连接,形成一个线性的更改历史。

graph LR A[提交 1] --> B[提交 2] B --> C[提交 3] C --> D[提交 4]

除了第一个提交外,每个提交都有一个父提交。父提交代表在当前更改之前项目的状态。通过遍历提交历史,你可以看到项目随时间的演变情况。

提交更改

要在你的 Git 仓库中创建一个新提交,你通常按以下步骤操作:

  1. 暂存更改:使用 git add 命令将修改、添加或删除的文件添加到暂存区。
  2. 编写提交消息:提供一个简洁且有意义的提交消息,描述提交中所做的更改。
  3. 创建提交:使用 git commit 命令用暂存的更改和提交消息创建一个新提交。
## 暂存更改
git add file1.txt file2.txt

## 创建提交
git commit -m "实现新功能 X"

通过理解 Git 提交的概念,你可以有效地管理和浏览项目历史,更轻松地与他人协作、审查更改,并在必要时回滚到以前的状态。

撤销你最近的提交

有时,你可能需要撤销或反转你已经做出的提交。当你意识到最新提交中的更改不正确、不完整或需要修改时,就可能会出现这种情况。根据你的具体需求,Git 提供了几种方法来撤销你最近的提交。

撤销最近的提交

撤销最近提交的最直接方法是使用 git reset 命令。这个命令允许你将分支指针移回上一个提交,从而有效地反转最新提交引入的更改。

## 撤销最近的提交,但保留工作目录中的更改
git reset HEAD~1

## 撤销最近的提交并丢弃所有更改
git reset --hard HEAD~1

在第一个示例中,git reset HEAD~1 命令将分支指针移回一个提交,但已撤销提交中的更改仍存在于你的工作目录中。这使你能够查看更改,并可能稍后重新提交它们。

在第二个示例中,git reset --hard HEAD~1 命令不仅将分支指针移回一个提交,还丢弃了已撤销提交中的所有更改。当你想完全删除最新提交引入的更改时,这很有用。

修改最近的提交

如果你想对你最近的提交进行更改,可以使用 git commit --amend 命令。这个命令允许你修改提交消息、添加或删除文件,或对最近的提交进行其他更改。

## 修改最近的提交消息
git commit --amend -m "新的提交消息"

## 将一个文件添加到最近的提交中
git add new_file.txt
git commit --amend

通过使用 git commit --amend,你可以有效地更新最近的提交,而无需创建新的提交,从而保持提交历史的干净和有序。

实际的反转场景

在几种情况下,你可能需要反转你最近的提交:

  1. 错误的更改:如果你不小心做了你不想保留的更改,可以使用 git reset 来撤销提交并丢弃更改。
  2. 不完整的更改:如果你在最近的提交中忘记包含一个文件或进行一项更改,可以使用 git commit --amend 来更新提交并包含遗漏的更改。
  3. 敏感信息:如果你不小心提交了敏感信息,如 API 密钥或密码,可以使用 git reset 来删除提交,然后采取适当措施保护敏感数据。

通过了解如何反转你最近的提交,你可以有效地管理你的 Git 仓库,并保持干净和有序的提交历史。

实际的反转场景

既然你已经了解了撤销最近提交的基础知识,让我们来探讨一些你可能需要使用这些技巧的实际场景。

场景 1:错误的更改

假设你已经对你的项目做了一些更改,但在审查之后,你意识到这些更改是错误的或不必要的。在这种情况下,你可以使用 git reset 来撤销最新的提交并丢弃这些更改。

## 撤销最新的提交并丢弃所有更改
git reset --hard HEAD~1

此命令会将分支指针移回上一个提交,有效地删除最新的提交及其引入的所有更改。

场景 2:不完整的更改

有时,你可能会在最新的提交中忘记包含一个文件或进行一项更改。在这种情况下,你可以使用 git commit --amend 来更新最新的提交并包含遗漏的更改。

## 将一个文件添加到最新的提交中
git add new_file.txt
git commit --amend -m "在最新提交中包含新文件"

这将更新最新的提交以包含新文件,并且提交消息也会更新以反映这些更改。

场景 3:提交了敏感信息

如果你不小心提交了敏感信息,例如 API 密钥或密码,你会希望尽快从仓库中删除该提交。你可以使用 git reset 来撤销最新的提交,然后采取适当的措施来保护敏感数据。

## 撤销最新的提交,但保留工作目录中的更改
git reset HEAD~1

## 从工作目录中删除敏感信息
## 并采取适当的措施来保护数据

通过了解这些实际场景以及相应的 Git 命令,你可以有效地管理你的提交历史并维护项目的完整性。

总结

通过遵循本教程中概述的步骤,你将能够自信地撤销你最近的 Git 提交,并对你的项目版本历史保持控制。这里展示的 “git 撤销最新提交” 方法将帮助你迅速从错误中恢复,试验更改,并使你的代码库保持有序和最新状态。应用这些技巧来简化你的 Git 工作流程,并确保你的项目走上正轨。