如何取消 Git 已跟踪的更改

GitGitBeginner
立即练习

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

简介

Git 是一个强大的版本控制系统,它允许开发者高效地跟踪和管理代码更改。本教程提供了关于取消已跟踪更改的全面指导,帮助程序员理解各种技术,以便无缝地丢弃本地修改并撤销已提交的工作。

Git 更改概述

理解 Git 工作流程

Git 通过三个主要区域来管理更改:

graph LR A[工作目录] --> B[暂存区] B --> C[Git 仓库]
区域 描述 特点
工作目录 本地文件系统 未跟踪/已修改的文件
暂存区 准备区域 准备提交的文件
Git 仓库 永久存储 提交更改的历史记录

Git 中的更改类型

已跟踪的更改

已跟踪的更改是指 Git 当前正在监控的文件的修改。这些更改可以处于不同的状态:

  1. 已修改:文件已更改但未暂存
  2. 已暂存:准备提交的文件
  3. 已提交:永久存储在仓库中的更改

未跟踪的更改

未跟踪的文件是尚未添加到 Git 版本控制系统的新文件。

基本的更改管理概念

Git 提供了多种管理更改的策略:

  • 丢弃本地修改
  • 撤销已提交的工作
  • 暂存临时更改

通过理解这些概念,使用 LabEx 的开发者可以有效地管理其项目的版本控制工作流程。

丢弃本地修改

取消本地更改的策略

丢弃特定文件中的更改

graph LR A[已修改的文件] --> B{丢弃方法} B --> |checkout| C[恢复原始状态] B --> |restore| D[移除本地更改]
使用 git checkout

将单个文件恢复到其上次提交的状态:

## 丢弃特定文件中的更改
git checkout -- filename.txt

## 丢弃多个文件中的更改
git checkout -- file1.txt file2.txt
使用 git restore

用于丢弃本地修改的现代 Git 方法:

## 丢弃特定文件中的更改
git restore filename.txt

## 丢弃多个文件中的更改
git restore file1.txt file2.txt

丢弃所有本地更改

命令 范围 效果
git checkout. 所有已跟踪的文件 还原整个工作目录
git restore. 所有已跟踪的文件 移除所有本地修改

高级丢弃技巧

清理未跟踪的文件
## 移除未跟踪的文件
git clean -f

## 移除未跟踪的文件和目录
git clean -fd

最佳实践

  • 在丢弃更改之前始终验证更改
  • 使用 git status 了解当前的修改
  • 谨慎使用全局丢弃命令

LabEx 建议在执行丢弃操作之前仔细检查,以防止意外数据丢失。

撤销已提交的工作

还原已提交的更改

理解提交撤销策略

graph LR A[已提交的更改] --> B{还原方法} B --> |软重置| C[在工作目录中保留更改] B --> |硬重置| D[完全移除更改] B --> |还原| E[创建相反的提交]

软重置:保留本地更改

## 撤销上一次提交,在工作目录中保留更改
git reset --soft HEAD~1

## 撤销特定数量的提交
git reset --soft HEAD~3

硬重置:完全移除更改

## 完全移除上一次提交
git reset --hard HEAD~1

## 危险操作:移除所有本地更改
git reset --hard HEAD

创建反向提交

## 创建一个新的提交来撤销上一次提交
git revert HEAD

## 通过哈希值撤销特定提交
git revert abc123

撤销方法比较

方法 工作目录 暂存区 提交历史
软重置 保留更改 已暂存 移除提交
硬重置 移除更改 清除 移除提交
还原 无更改 无更改 添加反向提交

高级提交操作

交互式变基

## 交互式修改最后3次提交
git rebase -i HEAD~3

注意事项和最佳实践

  • 避免修改共享仓库历史
  • 使用 git reflog 恢复丢失的提交
  • 在进行复杂操作之前始终创建备份分支

LabEx 建议在撤销已提交的工作时仔细考虑,以防止意外的数据丢失。

总结

了解如何取消 Git 已跟踪的更改对于维护干净且有条理的代码仓库至关重要。通过掌握诸如丢弃本地修改和撤销提交等技术,开发者能够有效地管理他们的版本控制工作流程,确保代码质量和项目完整性。