如何丢弃暂存的修改

GitGitBeginner
立即练习

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

简介

在 Git 版本控制系统中,了解如何管理和丢弃暂存的修改对于维护干净、有序的代码仓库至关重要。本教程将为你在 Git 工作流程中有效处理暂存文件和撤销不需要的更改提供全面指导。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/BasicOperationsGroup -.-> git/rm("Remove Files") git/DataManagementGroup -.-> git/reset("Undo Changes") git/DataManagementGroup -.-> git/restore("Revert Files") subgraph Lab Skills git/add -.-> lab-418094{{"如何丢弃暂存的修改"}} git/status -.-> lab-418094{{"如何丢弃暂存的修改"}} git/commit -.-> lab-418094{{"如何丢弃暂存的修改"}} git/diff -.-> lab-418094{{"如何丢弃暂存的修改"}} git/rm -.-> lab-418094{{"如何丢弃暂存的修改"}} git/reset -.-> lab-418094{{"如何丢弃暂存的修改"}} git/restore -.-> lab-418094{{"如何丢弃暂存的修改"}} end

Git 暂存基础

理解 Git 暂存区

在 Git 中,暂存区(也称为索引)是工作目录和 Git 仓库之间的一个关键中间步骤。它使你能够有选择地决定要提交哪些更改。

暂存的关键概念

什么是暂存?

暂存是为提交准备文件的过程。当你暂存文件时,你是在告诉 Git 你希望在下一次提交中包含哪些修改。

graph LR A[工作目录] --> |git add| B[暂存区] B --> |git commit| C[仓库]

暂存命令

命令 描述
git add <file> 暂存特定文件
git add. 暂存所有修改的文件
git status 检查暂存状态

实际示例

让我们在 Ubuntu 22.04 上的实际场景中演示暂存:

## 创建一个新目录并初始化一个 Git 仓库
mkdir git-staging-demo
cd git-staging-demo
git init

## 创建一个示例文件
echo "Hello, LabEx Git Tutorial" > example.txt

## 检查仓库状态
git status

## 暂存文件
git add example.txt

## 验证暂存
git status

为什么使用暂存?

  1. 选择性提交:仅暂存特定更改
  2. 代码审查:在提交之前审查更改
  3. 精细版本控制:微调每个提交中包含的内容

最佳实践

  • 一起暂存相关更改
  • 使用描述性提交消息
  • 频繁提交小的、逻辑上的更改

通过理解 Git 暂存,你可以更好地控制版本控制工作流程。

撤销暂存的文件

理解 Git 中的文件撤销

当你已经暂存了文件,但又想撤销这些更改时,Git 提供了多种策略来撤销暂存的修改。

取消暂存文件的方法

1. 使用 git reset

用于取消文件暂存的主要命令是 git reset

## 取消特定文件的暂存
git reset HEAD <文件名>

## 取消所有暂存的文件
git reset HEAD

2. 使用 git restore

现代 Git 版本推荐使用 git restore

## 取消特定文件的暂存
git restore --staged <文件名>

## 取消所有暂存的文件
git restore --staged.

实际场景

graph TD A[工作目录] --> B[暂存的更改] B --> |git reset| A B --> |git restore --staged| A

取消暂存工作流程示例

## 初始化一个 Git 仓库
mkdir git-revert-demo
cd git-revert-demo
git init

## 创建示例文件
echo "First content" > file1.txt
echo "Second content" > file2.txt

## 暂存两个文件
git add file1.txt file2.txt

## 检查暂存状态
git status

## 取消特定文件的暂存
git restore --staged file1.txt

取消暂存方法的比较

命令 作用范围 Git 版本 是否推荐
git reset HEAD 特定/全部 所有版本 较旧版本
git restore --staged 特定/全部 2.23 及以上 当前版本

重要注意事项

  • git restore --staged 不会修改文件内容
  • 在取消暂存前后始终验证你的暂存状态
  • 谨慎使用这些命令以防止意外的数据丢失

LabEx 提示

学习 Git 时,在安全的实验环境中练习这些命令,以增强对版本控制技术的信心。

高级修改技巧

高级暂存与修改技术

除了基本操作外,Git 还提供了用于管理暂存和修改文件的复杂方法。

交互式暂存

使用 git add -p

交互式补丁模式允许选择性地暂存文件的部分内容:

## 进入交互式暂存
git add -p

## 交互式暂存期间的选项:
## y - 暂存此块
## n - 不暂存此块
## s - 拆分当前块
## e - 手动编辑当前块

贮藏管理

临时更改存储

graph TD A[工作目录] --> |git stash| B[贮藏区] B --> |git stash pop| A B --> |git stash apply| A

贮藏命令

## 贮藏当前更改
git stash

## 列出所有贮藏
git stash list

## 应用最新贮藏
git stash pop

## 应用特定贮藏
git stash apply stash@{n}

复杂修改策略

技术 命令 目的
部分取消暂存 git restore -p 选择性地取消暂存更改
丢弃本地更改 git checkout -- <file> 移除未提交的修改
清理未跟踪文件 git clean -fd 移除未跟踪的文件/目录

高级 Git 配置

## 忽略空白字符更改
git config --global core.whitespace -trailing-space

## 启用自动颜色输出
git config --global color.ui auto

LabEx Pro 提示

掌握这些高级技术需要在可控环境中持续练习和实验。

潜在陷阱

  • 在进行复杂的 Git 操作之前,始终备份重要工作
  • 了解每个命令的影响
  • 对具有破坏性的命令使用 --dry-run 进行测试

工作流程优化

## 创建一个安全的修改工作流程
git fetch origin
git checkout -b safe-modifications
## 进行你的更改
git add.
git commit -m "安全的实验性更改"

结论

高级 Git 修改技术为你的版本管理提供了精细控制,支持更复杂的开发工作流程。

总结

掌握丢弃暂存修改的技术,能让开发者对其 Git 仓库保持精确控制。通过理解暂存基础、撤销文件以及应用高级修改策略,程序员可以简化他们的版本控制流程,并自信地确保代码的完整性。