如何丢弃 Git 仓库工作目录中的更改

GitGitBeginner
立即练习

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

简介

Git 是一个强大的版本控制系统,它允许开发者有效地管理他们的代码库。在本教程中,我们将探讨如何丢弃 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/status("Check Status") git/BasicOperationsGroup -.-> git/clean("Clean Workspace") git/DataManagementGroup -.-> git/reset("Undo Changes") git/DataManagementGroup -.-> git/restore("Revert Files") git/BranchManagementGroup -.-> git/checkout("Switch Branches") subgraph Lab Skills git/status -.-> lab-415180{{"如何丢弃 Git 仓库工作目录中的更改"}} git/clean -.-> lab-415180{{"如何丢弃 Git 仓库工作目录中的更改"}} git/reset -.-> lab-415180{{"如何丢弃 Git 仓库工作目录中的更改"}} git/restore -.-> lab-415180{{"如何丢弃 Git 仓库工作目录中的更改"}} git/checkout -.-> lab-415180{{"如何丢弃 Git 仓库工作目录中的更改"}} end

理解 Git 工作目录

Git 是一个分布式版本控制系统,用于管理仓库中文件的更改。Git 功能的核心是工作目录的概念,它是你计算机上存储和修改项目文件的本地目录。

Git 仓库结构

一个 Git 仓库由三个主要部分组成:

  1. 工作目录:这是你在本地机器上编辑和修改项目文件的目录。
  2. 暂存区(索引):暂存区是一个你可以在将一组更改提交到仓库之前进行准备的地方。
  3. Git 仓库(.git 目录):这是 Git 用于存储项目所有元数据和历史记录的隐藏目录。
graph LR A[工作目录] --> B[暂存区] B --> C[Git 仓库]

理解工作目录

工作目录是你积极对项目文件进行更改的地方。当你在工作目录中添加、修改或删除文件时,Git 会识别这些更改,但它们尚未成为仓库历史记录的一部分。

要查看工作目录的当前状态,你可以使用 git status 命令:

git status

这将显示工作目录中哪些文件已被修改、添加或删除。

跟踪工作目录中的更改

Git 跟踪工作目录中文件的更改。当你对文件进行更改时,Git 会识别该文件已被修改。然后,你可以使用 git add 命令暂存这些更改,该命令将更改从工作目录移动到暂存区。

git add <file>

一旦更改被暂存,你可以使用 git commit 命令将它们提交到仓库的历史记录中。

git commit -m "提交消息"

通过理解工作目录在 Git 工作流程中的作用,你可以有效地管理和跟踪项目文件的更改。

丢弃工作目录中的更改

有时,你可能想要丢弃在工作目录中所做的更改,并恢复到项目的上一次提交状态。Git 提供了几个命令来帮助你实现这一点。

丢弃未暂存的更改

如果你在工作目录中对文件进行了更改,但尚未暂存这些更改,你可以使用 git restore 命令来丢弃这些更改:

git restore <file>

这将把指定的文件恢复到它们的上一次提交状态,有效地丢弃任何未保存的更改。

丢弃已暂存的更改

如果你已经使用 git add 暂存了一些更改,但在提交之前想要丢弃它们,可以使用带有 --staged 选项的 git restore 命令:

git restore --staged <file>

这将从暂存区中移除更改,但它们仍会存在于你的工作目录中。

丢弃所有未保存的更改

要丢弃工作目录中的所有更改,包括未暂存和已暂存的更改,可以使用带有 --source 选项的 git restore 命令:

git restore --source HEAD.

这将把工作目录中的所有文件恢复到它们的上一次提交状态,有效地丢弃所有未保存的更改。

丢弃更改并恢复到特定提交

如果你想要丢弃所有更改并将工作目录恢复到特定提交,可以使用 git reset 命令:

git reset --hard <commit-hash>

<commit-hash> 替换为你想要恢复到的提交的 SHA-1 哈希值。这将丢弃所有更改,并将你的工作目录、暂存区和仓库移动到指定的提交。

通过了解这些命令,你可以根据需要有效地管理和丢弃 Git 工作目录中的更改。

丢弃更改的实际场景

在各种场景中,丢弃工作目录中的更改可能会很有用。让我们来探讨一些常见的用例:

场景 1:撤销不需要的修改

假设你一直在处理一个功能,并对项目文件做了一些更改。然而,你意识到你所做的一些更改是不需要的,或者正在导致问题。在这种情况下,你可以使用 git restore 命令来丢弃你不想要的特定更改。

git restore file1.txt file2.txt

这将撤销在你的工作目录中对 file1.txtfile2.txt 所做的更改。

场景 2:清理暂存区

有时,你可能会不小心暂存了你不想提交的更改。在这种情况下,你可以使用带有 --staged 选项的 git restore 命令从暂存区中移除这些更改,而不会从工作目录中丢弃它们。

git restore --staged file3.txt

这将从暂存区中移除对 file3.txt 的更改,但它们仍会存在于你的工作目录中。

场景 3:重置到已知的良好状态

假设你已经处理一个功能有一段时间了,并且你已经做了很多更改,包括暂存的和未暂存的。然而,你意识到代码库现在处于不稳定状态,你想丢弃所有更改并恢复到上一个已知的良好提交。在这种情况下,你可以使用带有 --hard 选项的 git reset 命令。

git reset --hard HEAD

这将丢弃你的工作目录和暂存区中的所有更改,并将你的项目重置到上一次提交的状态。

场景 4:在合并或变基之前丢弃更改

在处理功能分支时,在与主分支合并或变基之前,你可能需要丢弃你的本地更改。这对于确保干净的合并或变基过程可能很有用。

git restore.
git reset --hard origin/main

第一个命令丢弃工作目录中的所有更改,第二个命令将分支重置到 main 分支的状态。

通过理解这些实际场景,你可以有效地使用 Git 命令来丢弃更改,并保持工作目录的干净和有序。

总结

在本教程结束时,你将全面了解如何丢弃 Git 仓库工作目录中的更改。你将学习到实用的技巧来管理你的 Git 工作流程,使你能够维护一个干净且有条理的代码库。这些知识将使你在使用 Git 时更高效地工作,确保你的开发过程保持顺畅且富有成效。