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

03-Git跟踪的对象有哪些?

学 Git 不知道它到底在跟踪啥,就像搞网络不懂三层转发一样 —— 到底差点意思。

写代码用 Git,很多人只会addcommitpush,可你真知道 Git 在背后都跟踪了哪些东西吗?

别急,本专栏《Git基础教程》第一部分:基础知识——第2节:Git跟踪的对象有哪些?,彻底给你掰开揉碎讲明白。

🎯 为什么要搞懂“Git 跟踪的对象”?

很多人对 Git 的印象只有:

  • “保存代码快照”
  • “回滚历史”
  • “协作用的”

但 Git 远比你想象复杂和强大。

如果你:

  • 遇到“为什么我改了文件 Git 却不理我?”
  • 想知道“Git 到底跟踪了啥,哪些东西不在它管辖内?”

——那这篇文章就是为你写的!

📌 一句话总结:“Git 跟踪的对象”,就是 Git管理记录快照的那些文件。

这些对象组成了 Git 的“大脑”,它能精准知道:

  • 哪些是改过的
  • 哪些是新增的
  • 哪些根本不需要管

→ “版本控制的底层逻辑”,全靠这些“对象”完成!

🗂️ Git 跟踪对象的“三大分类”

记住:Git 的跟踪对象,不是随心所欲,是有明确规则和分类的。

1️⃣ 已跟踪文件(Tracked)

这是Git 已经知道它存在的文件,属于正式纳入版本控制的范畴。

2️⃣ 未跟踪文件(Untracked)

仓库里没有它,Git 完全不认识它。

比如你新建了test.py,Git 状态显示:

Untracked files: (use "git add <file>..." to include in what will be committed) test.py

✔️ → 执行git add test.py开始跟踪

3️⃣ 忽略文件(Ignored)

你专门告诉 Git:别跟踪它。

常用配置文件是.gitignore

常见场景举例
临时文件*.log / *.tmp / ~filename
编译生成*.pyc /pycache/
依赖文件node_modules/ / vendor/
私密配置.env / config-local.json

🔍 Git 背后到底跟踪了什么?

Git 跟踪的对象不仅仅是“文件”,它实际上跟踪的是“对象模型”。

📦 Git 对象数据库

→ 也就是说,Git 跟踪的不是文件名,而是“文件快照内容 + 目录结构 + 版本关系”。

⚡ 所以:

  • 文件改名不改内容,Git 不会存两份 → 哈希值相同
  • 重复内容的文件,Git 也只存一份 → 节省空间

示例:

.git/objects/xx/xxxxxx

这些哈希文件夹,就是 Git 储存快照的秘密基地。

🗃️哪些东西 Git 会忽略?你可以自己配置

.gitignore配置 = 告诉 Git:这些文件,别理我!

场景配置示例
忽略所有.log文件*.log
忽略某个文件夹temp/
忽略所有.pyc文件*.pyc
忽略某个具体文件secret.env
但要保留某个特例文件!keep_this_file.txt

.gitignore文件写在仓库根目录或子目录,按需分层配置。

常用模板 →

https://github.com/github/gitignore

📂 Git 怎么判断哪些文件要跟踪?

逻辑顺序:

1️⃣ 先匹配.gitignore忽略

2️⃣ 不在.gitignore→ Git 检查是否已纳入版本控制

3️⃣ 新文件 →未跟踪

4️⃣git add→ 加入暂存区(Staging)

5️⃣git commit正式记录

🧩 工作区、暂存区、版本库,分别跟踪什么?

✅ 如何查看 Git 正在跟踪哪些东西?

常用命令推荐:

功能命令
查看当前状态git status
查看忽略规则git check-ignore -v 文件名
查看跟踪的所有文件git ls-files
查看提交历史git log --oneline --graph
查看某个文件历史git log 文件名

还是那句话,如果你是Git小白,不太明白上面的Git命令,先不着急,知道有这么一回事,后面都会细讲,到时候你二刷的时候就清晰明了了!

http://www.jsqmd.com/news/689533/

相关文章:

  • 别只改源文件!彻底解决Python‘collections has no attribute’错误的三种思路(以live-server为例)
  • 多摩川绝对值编码器CPLD FPGA通信源码(VHDL格式协议说明书)
  • 从网卡到代码:手把手带你用Solarflare onload零改造加速现有Socket应用
  • Rockchip RK3576嵌入式SoM架构与工业应用解析
  • 终结二维监控,开启室内三维无感定位时代——面向楼宇、园区与高敏感区域的多视角视觉定位方案
  • RAG与RAGFlow详解:从原理到应用
  • 机器学习工程师在媒体行业的实战经验与MLOps架构解析
  • 树莓派5到手别急着通电!保姆级Pi Imager烧录避坑指南(含SD卡选购与验证)
  • 为什么92%的Docker集群仍在用静态limit?Docker 27动态配额的3大隐藏能力,DevOps团队已紧急启用
  • 基于Pixhawk与ROS的无人车自主导航(一):底盘驱动与固件配置实战
  • 多模态AI技术解析:从原理到行业应用实践
  • 免费开源的WPS AI插件 察元AI助手:globalSettings:文件与 localStorage 双读策略
  • Qt Creator新建QML项目踩坑记:为什么选了Qt 5.8就报‘No valid kits found’?
  • 从OOSEM到MagicGrid:一文理清主流MBSE方法论,帮你找到最适合团队的那一款
  • SAP自动化新思路:当Python遇到Scripting Tracker,如何优雅地绕过SAP GUI Scripting的授权难题?
  • 室内空间管理为什么必须走向“高精度无感感知”——基于镜像视界(浙江)科技有限公司核心技术体系的下一代空间智能方案
  • 保姆级教程:在Colab和本地用safetensors加速你的Hugging Face模型加载
  • 如何用Resemble Enhance实现专业级语音降噪与增强:4大特色让你轻松优化音频质量
  • AFL内核探秘:从插桩到反馈的闭环模糊测试引擎
  • 为什么92%的医院Docker集群仍在裸奔?Docker 27透明加密模块上线首周已拦截47次敏感数据越权访问,
  • Java项目里用ZeroMQ实现发布订阅,比你想的简单:一个股票行情推送的实战案例
  • 面试官最爱问的10个计算机网络问题,从TCP/IP到DNS,一次讲透
  • AI辅助编程:Vibe Coding实践与传统技能平衡
  • 嵌入式Linux开机自启踩坑记:从BusyBox init到Systemd的迁移思考
  • Sentinel控制台(Dashboard)从下载到生产环境部署的完整指南:Docker打包、开机自启与安全配置
  • AI 会话记忆模块静默失效:一次从链路耦合到分层治理的工程复盘
  • 【仅限首批2000名VSCode Insider】:获取VSCode 2026多智能体协同私有扩展包(含Agent权限沙箱+可信执行环境TEEs预编译模块)
  • PyCharm死活找不到Anaconda虚拟环境?别慌,手把手教你定位并修复那个烦人的‘Conda executable not found‘
  • Python微信自动化管理实战方案:WeChat Toolbox技术架构解析
  • 避开这些坑!用STM32定时器主从模式精准控制松下伺服电机转指定圈数