Git
这篇笔记围绕 .git 目录的可见方式、核心文件结构和分支切换机制,解释 Git 仓库状态并不只存在于工作区文件,而是由 HEAD、refs 和 objects 共同维护。内容先给出在 macOS 终端、Finder 与 VS Code 中查看隐藏 .git 文件夹的方法,再梳理 HEAD、config、refs、objects、hooks、logs 等条目的作用,其中 objects 被定位为 Git 存储提交、文件内容和目录结构的对象数据库。文章重点拆解 blob、tree、commit、tag 四类对象,说明对象文件经过压缩和哈希命名,不能直接用 cat 阅读,而应通过 git cat-file -t 和 -p 查看类型与内容。通过 commit hash 追踪到 tree,再从 tree 找到 blob 的示例,笔记解释了为什么 git cat-file -p commit 只能看到提交元信息、父提交和 tree 指针,而不会直接显示代码内容;若目标是查看一次提交的改动,应使用 git show 获取提交信息、diff 和文件变更。后半部分把 git switch 或 checkout 切换分支还原为 HEAD 指向变化、refs/heads 中提交哈希读取,以及对应 tree/blob 快照写入工作区的过程,并用 HEAD → refs → commit → tree → blob 的链路串起内部模型。文章也区分了 git switch 与 git checkout 的命令边界:前者语义更专注于分支切换,后者还能回滚文件或进入 detached HEAD,适合已经了解风险的场景。适合想从文件系统层面理解 Git 工作原理、排查提交对象疑惑,或希望更安全地区分分支切换与文件回滚命令的开发者阅读。