当前位置: 首页 > news >正文

Git 中**未暂存**和**未跟踪**的区别:

文件状态分类

Git 中的文件有以下几种状态:

工作区文件状态:
├── 未跟踪 (Untracked)
├── 已跟踪 (Tracked)├── 未修改 (Unmodified) ├── 已修改未暂存 (Modified/Unstaged)└── 已暂存 (Staged)

1. 未跟踪 (Untracked)

定义:Git 完全不知道这个文件的存在

特点

  • 新创建的文件
  • 从未被 git add
  • 不在 Git 的版本控制范围内
  • Git 不会自动备份或恢复这些文件

示例

# 创建一个新文件
echo "hello" > newfile.txt# 查看状态
git status
# 输出:
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#         newfile.txt

2. 未暂存 (Unstaged/Modified)

定义:文件已被 Git 跟踪,但当前的修改还没有添加到暂存区

特点

  • 文件之前已经被 git addgit commit
  • 文件内容发生了变化
  • 变化还没有通过 git add 添加到暂存区
  • Git 知道这个文件,也知道它被修改了

示例

# 修改一个已存在的文件
echo "modified content" > existingfile.txt# 查看状态  
git status
# 输出:
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git restore <file>..." to discard changes in working directory)
#         modified:   existingfile.txt

实际演示对比

# 初始状态
git status
# On branch main
# nothing to commit, working tree clean# 1. 创建新文件 (未跟踪)
echo "new file" > untracked.txt# 2. 修改已存在的文件 (未暂存)
echo "modified" > README.mdgit status
# On branch main
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git restore <file>..." to discard changes in working directory)
#         modified:   README.md          ← 未暂存 (已跟踪但有修改)
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#         untracked.txt                  ← 未跟踪 (Git不知道这个文件)

不同的清理命令

处理未跟踪文件

# 只删除未跟踪的文件
git clean -f# 删除未跟踪的文件和目录
git clean -fd# 预览会删除哪些未跟踪文件
git clean -n

处理未暂存的修改

# 丢弃未暂存的修改 (恢复到最后一次commit的状态)
git checkout .
# 或
git restore .# 丢弃特定文件的未暂存修改
git checkout -- filename
# 或  
git restore filename

一次性处理两种情况

# 丢弃所有修改 + 删除未跟踪文件
git reset --hard HEAD  # 处理未暂存修改
git clean -fd          # 处理未跟踪文件

状态转换图

[未跟踪文件] ↓ git add
[已暂存文件]↓ git commit  
[已提交文件] → 修改内容 → [未暂存修改]↑                         ↓ git add└─────── git commit ←── [已暂存修改]

实际场景举例

# 场景1:开发新功能
touch feature.js        # 创建新文件 → 未跟踪
vim README.md          # 修改已有文件 → 未暂存# 场景2:查看不同类型的修改
git status
# Changes not staged for commit:    ← 这些是未暂存修改
#         modified:   README.md
# 
# Untracked files:                  ← 这些是未跟踪文件  
#         feature.js# 场景3:分别处理
git add feature.js     # 未跟踪 → 已暂存
git restore README.md  # 未暂存修改 → 丢弃修改
git clean -f          # 删除其他未跟踪文件

总结对比

特征未跟踪 (Untracked)未暂存 (Unstaged)
Git是否知道文件❌ 不知道✅ 知道
文件是否存在历史版本❌ 没有✅ 有
是否可以用 git restore 恢复❌ 不能✅ 能
是否会在 git diff 中显示❌ 不会✅ 会
清理命令git cleangit restoregit checkout
风险程度删除就彻底没了可以恢复到最后commit状态

记忆技巧

  • 未跟踪 = Git 不认识这个文件
  • 未暂存 = Git 认识文件,但修改还没准备好提交
http://www.dtcms.com/a/316259.html

相关文章:

  • 【深度学习-Day 41】解密循环神经网络(RNN):深入理解隐藏状态、参数共享与前向传播
  • P2161 [SHOI2009] 会场预约
  • 中山铸造加工件自动蓝光三维测量方案-中科米堆CASAIM
  • 喷砂机常见故障及排除维修解决方法有哪些?
  • 猎板深度解析:EMI 干扰 —— 电子设备的隐形 “破坏者”
  • Dot1x认证原理详解
  • 利用 Radius Resource Types 扩展平台工程能力
  • 在 QtC++ 中调用 OpenCV 实现特征检测与匹配及图像配准应用
  • Linux DNS缓存与Nginx DNS缓存运维文档
  • 数据结构 | 树的秘密
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘pytorch-lightning’问题
  • 机器学习之线性回归与逻辑回归
  • 网络muduo库的实现(2)
  • 计算机算术5-整形除法
  • MySql数据库归档工具pt-archiver
  • Android audio之 AudioDeviceInventory
  • 第三方验收测试报告:软件项目验收中的核心要素
  • 前端权限设计
  • Pandas query() 方法详解
  • 涨薪技术|Kubernetes(k8s)之Pod生命周期(上)
  • Deveco Studio 3.1.0.501 Windows版下载安装教程 - 华为开发者工具安装步骤详解
  • BenchmarkDotNet 性能基准测试
  • 统计鱼儿分布情况 Java
  • 三种灰狼算法求解无人机三维路径规划【MATLAB实现】
  • 2025国赛数学建模C题详细思路模型代码获取,备战国赛算法解析——层次分析法
  • MATLAB实现菲涅尔法全息成像仿真
  • Groovy学习篇章一之—— GDK 探秘:Groovy如何给Java对象“开外挂”,让String也能“跑命令”!
  • 磁悬浮转子的“静音术”:深度解析无接触抑制旋转幽灵的奥秘
  • 基于MCP的智能客服系统:知识库与工单系统深度集成
  • 英语中日期与时间缩写