如何在 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/BranchManagementGroup -.-> git/log("Show Commits") git/BranchManagementGroup -.-> git/reflog("Log Ref Changes") git/BranchManagementGroup -.-> git/rebase("Reapply Commits") subgraph Lab Skills git/commit -.-> lab-414802{{"如何在 Git 仓库中撤销特定提交"}} git/reset -.-> lab-414802{{"如何在 Git 仓库中撤销特定提交"}} git/log -.-> lab-414802{{"如何在 Git 仓库中撤销特定提交"}} git/reflog -.-> lab-414802{{"如何在 Git 仓库中撤销特定提交"}} git/rebase -.-> lab-414802{{"如何在 Git 仓库中撤销特定提交"}} end

理解 Git 提交

什么是 Git 提交?

Git 提交是项目文件在特定时间点的快照。当你对项目进行更改并想要保存这些更改时,你会创建一个新的提交。每个提交都包含你所做的更改,以及一条描述你更改内容的消息。

Git 提交的结构

一个 Git 提交由以下关键部分组成:

  1. 提交哈希(Commit Hash):提交的唯一标识符,通常是一长串字母和数字。
  2. 作者(Author):做出更改并创建提交的人。
  3. 日期(Date):创建提交的日期和时间。
  4. 提交消息(Commit Message):对提交中所做更改的简要描述。
  5. 差异(Diff):提交中所做的更改,显示哪些文件被添加、修改或删除。

查看提交历史记录

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

git log

你还可以使用带有各种选项的 git log 命令来自定义输出,例如限制提交数量、显示文件更改或格式化输出。

理解提交关系

Git 仓库中的提交以线性方式相互连接,形成提交历史记录。除了第一个提交之外,每个提交都有一个在它之前的父提交。提交之间的这种父子关系使你能够浏览提交历史记录并恢复到项目的先前状态。

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

通过理解 Git 提交的基本概念,你可以有效地管理和浏览项目的历史记录,这在必要时恢复到先前状态时至关重要。

恢复到上一次提交

理解 revertreset

在 Git 中,恢复到上一次提交主要有两种方法:

  1. revert:这会创建一个新的提交,撤销目标提交中所做的更改,有效地 “还原” 这些更改。
  2. reset:这会将当前分支指针移动到指定的提交,有效地丢弃该点之后的所有提交。

使用 git revert

要使用 git revert 命令恢复到上一次提交,请执行以下步骤:

  1. 确定你要恢复的提交的哈希值。

  2. 运行以下命令,将 <commit-hash> 替换为你确定的提交哈希值:

    git revert <commit-hash>
  3. Git 将创建一个新的提交,撤销目标提交中所做的更改。

使用 git reset

要使用 git reset 命令恢复到上一次提交,请执行以下步骤:

  1. 确定你要恢复到的提交的哈希值。

  2. 运行以下命令,将 <commit-hash> 替换为你确定的提交哈希值:

    git reset --hard <commit-hash>
  3. Git 将把当前分支指针移动到指定的提交,有效地丢弃该点之后的所有提交。

选择正确的方法

git revertgit reset 之间进行选择取决于你的具体用例:

  • 当你想要撤销提交中所做的更改,但保持提交历史记录完整时,使用 git revert
  • 当你想要丢弃特定点之后的所有提交并从该提交重新开始时,使用 git reset

需要注意的是,git reset 会丢弃提交历史记录,因此应谨慎使用,尤其是在其他协作者可能在同一分支上工作的共享仓库中。

实际场景与技巧

撤销特定提交

假设你提交了一个在项目中引入错误的提交。你可以使用 git revert 命令来撤销该提交所引入的更改,同时保留提交历史记录。

## 确定有问题的提交的哈希值

## 撤销该提交

这将创建一个新的提交,撤销目标提交中所做的更改。

重置到已知的良好状态

假设你进行了几次提交,但你意识到较早的一次提交是项目最后一个已知的良好状态。你可以使用 git reset 命令来丢弃该点之后的所有提交,并恢复到已知的良好状态。

## 确定已知良好提交的哈希值

## 将分支重置到已知良好的提交

这将把当前分支指针移动到指定的提交,有效地丢弃该点之后的所有提交。

撤销合并提交

如果你已经将一个分支合并到主分支中,后来又决定撤销该合并,你可以使用 git revert 命令来做到这一点。

## 确定合并提交的哈希值

## 撤销合并提交

这将创建一个新的提交,撤销合并提交所引入的更改,有效地撤销合并。

撤销过程中处理冲突

如果你试图撤销的更改与仓库的当前状态之间存在冲突,Git 将要求你手动解决冲突。你可以通过编辑冲突文件、选择你想要保留的更改,然后完成撤销过程来做到这一点。

## 撤销一个有冲突的提交

## 解决受影响文件中的冲突

通过理解这些实际场景和技巧,你将能够有效地在 Git 仓库中恢复到以前的提交,并管理项目的历史记录。

总结

在本全面的 Git 教程中,你已经学会了如何在你的仓库中撤销特定的提交。通过理解不同的技术和实际场景,你现在可以自信地撤销更改、将项目恢复到先前的状态,并维护一个干净且有条理的 Git 历史记录。对于任何使用版本控制系统的开发者来说,掌握 Git 提交撤销是一项至关重要的技能。