.git 文件夹

文件夹介绍

🍎 在 macOS 上如何查看 .git 文件夹?

✅ 方法一:终端查看(最推荐)

cd /你的项目路径/
ls -a

-a 参数表示“显示所有文件(包括隐藏的)”,你就能看到:

.git
.gitignore
README.md
...

✅ 方法二:在 Finder 中显示隐藏文件

⌘ Command + Shift + .(句号)

✅ 方法三:用 VS Code 直接看

1.	打开设置:⌘ + ,
2.	搜索:files.exclude
3.	把其中的 .git 相关条目注释掉或者取消选中(VS Code 会把某些目录默认隐藏)

📦 .git 目录里有什么?

文件/目录作用
HEAD当前指向的分支
configGit 仓库的本地配置
refs/各种分支、标签引用
objects/所有提交、文件内容、树结构的哈希存储(Git 的“数据库”)
hooks/提交前/后可以触发的脚本
logs/操作日志(比如 reflog)

没错,.git/objects/ 里那些奇奇怪怪的哈希文件,其实就是 Git 真正存储所有数据的地方,它们不是普通的“文件”,而是 Git 自己的 压缩 + 哈希命名的对象数据库

📁 .git/objects/ 目录结构长这样:

.git/objects/
├── 1a/
│   └── 2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9
├── 2f/
│   └── e4d3a6...
├── info/
├── pack/

这些文件夹名(如 1a)和文件名(如 2b3c…)拼起来就是一个完整的 Git 对象的哈希 ID(SHA-1 / SHA-256):

1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9

Git 有 4 种核心对象类型

类型说明
blob文件的实际内容
tree目录结构,记录了哪些文件/子目录
commit一次提交(指向一个 tree 和父提交)
tag标签对象(可选)

• 它们不是普通文本文件,是 zlib 压缩过的二进制格式

• 你如果直接 cat 它们,会看到乱码。

• 要查看内容,得用 Git 自己的工具来“解码”。

git cat-file -t <对象哈希>   # 查看类型
git cat-file -p <对象哈希>   # 查看内容
git cat-file -t 1a2b3c...    # 会返回 commit
git cat-file -p 1a2b3c...    # 会显示提交信息、tree、parent 等

❓ 为什么 git cat-file -p 没有我改的代码内容?

你查看的是一个 commit 对象,它只是一个元信息结构,不直接包含代码内容,而是指向一个 tree 对象,那个 tree 才是“这次提交的文件结构”。

~git cat-file -p 2128b10ad973b63050220008f4f829ca7cf1c91d
tree be01ffd3ae95fa8ddcea01d1c192763dbcb09067
parent 68e3ee2223934ac2286090a0af7dffc31a7a14f8
author jacinli <jackleo120ch@gmail.com> 1742742852 +0800
committer jacinli <jackleo120ch@gmail.com> 1742742852 +0800Add async and threading examples, along with a tool factory implementation for weather and time functions. Enhance AsyncOpenAIOut to support tool calls and integrate with the new factory structure.
(ai_tools_show) ➜  ai_tools_show git:(main) 

先使用commit的hash 进行查看,找到了这个tree 的东西

然后:

🧩 第一步:查看 tree 的结构

git cat-file -p be01ffd3ae95fa8ddcea01d1c192763dbcb09067
100644 blob 4d0b7ff0d8ff5a79dc93760360bc6d2f08a5b16f    .env.example
100644 blob 467ecf380409fdafed743e40ec61b1d2ce995f4c    .gitignore
100644 blob e4fba2183587225f216eeada4c78dfab6b2e65f5    .python-version
100644 blob 261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64    LICENSE
100644 blob 5f55fdc35d072fc8541908b3ddea28cbd363dcd3    README.md
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    main.py
040000 tree 14c520d1ba7e2871f6a85a83c28f790043eaaf02    opensource
100644 blob 8dcd957ad7bc913282d710d1387fe45c9879aeeb    pyproject.toml
040000 tree 852d4ade89a36f56b3140fc7a7d3308222b425ae    python_base
100644 blob b38a7182879346d08727dc60c243774cade67314    requirements.txt
040000 tree c3217f601f44899455e6933b807970160d550ebd    routers
040000 tree 1c56dc17f0e051a7253e67be29106d81e6d4aa4b    services
100644 blob 5069490541ffdc73cc5605f0f96822dfafce0273    uv.lock

再次查看:

git cat-file -p b38a7182879346d08727dc60c243774cade67314
openai
python_dotenv
fastapi
uvicorn
itsdangerous
sqladmin
sqlalchemy
langfuse%                                                                                                                       
(ai_tools_show) ➜  ai_tools_show git:(main) 

输出的就是你 main.py 的真实内容!✨

🧩 如果遇到 tree(目录),继续查

你想快速查看这次提交的改动文件内容,其实可以直接:

git show 2128b10ad973b63050220008f4f829ca7cf1c91d

这会自动帮你:
• 展示提交信息 ✅
• 展示 diff ✅
• 展示改了哪些文件 ✅
• 展示文件内容改了哪几行 ✅

切换分支

Git 切换分支本质上就是更新 .git/HEAD 和 .git/refs/ 的指向!

🧠 问题核心:

❓ 我每次 git checkout 或 git switch 切换分支,Git 到底做了啥?

✅ 一句话回答:

Git 本质上只是修改了 .git/HEAD 文件的内容,让它指向你要切换的分支(分支指向的是某个 commit 对象),然后把那个提交的快照内容 checkout 到工作区。

1. .git/HEAD 是当前分支的“指针”

cat .git/HEADref: refs/heads/main

说明 HEAD 当前指向的是 main 分支。

2. .git/refs/heads/main 存的是这个分支的 最新 commit 哈希

cat .git/refs/heads/main2128b10ad973b63050220008f4f829ca7cf1c91d

这就是 main 分支的“最新提交 ID”。

HEAD → refs/heads/main → commit 哈希 → tree → blob → 文件快照

3. 当你执行 git switch feature-x 时,发生了这些变化:

• .git/HEAD 从指向 main 改为指向 refs/heads/feature-x

• Git 读取 feature-x 分支对应的 commit

• 提取它指向的 tree 和 blob

• 替换你工作目录中的文件,使其反映这个 commit 的快照内容

命令用途特点
git switch专注于“切换分支更安全、更清晰,推荐使用
git checkout万能命令”:切分支、切文件、切提交都能干功能强,但容易误操作(如误切文件)
特性git switchgit checkout
语义只用于“切换分支”又能切分支又能切文件又能切提交
推荐✅ Git 官方推荐⚠️ 功能强但容易误用
是否 stash❌ 默认不会自动 stash❌ 一样不会
是否检查冲突✅ 是的✅ 也是
交互提示✅ 更人性化(会提示 use --discard-changes)❌ 更容易误删

日常开发中,推荐你使用:

git switch <branch>        # 切已有分支
git switch -c <branch>     # 创建并切换分支
git checkout -- main.py     # 回滚某个文件
git checkout 123abc         # 暂时进入某个提交(detached HEAD)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB 与 Elasticsearch 使用场景区别及示例

一、核心定位差异 ‌MongoDB‌ ‌定位‌&#xff1a;通用型文档数据库&#xff0c;侧重数据的存储、事务管理及结构化查询&#xff0c;支持 ACID 事务‌。‌典型场景‌&#xff1a; 动态数据结构存储&#xff08;如用户信息、商品详情&#xff09;‌。需事务支持的场景&#xf…

【深度学习基础 2】 PyTorch 框架

目录 一、 PyTorch 简介 二、安装 PyTorch 三、PyTorch 常用函数和操作 3.1 创建张量&#xff08;Tensor&#xff09; 3.2 基本数学运算 3.3 自动求导&#xff08;Autograd&#xff09; 3.4 定义神经网络模型 3.5 训练与评估模型 3.6 使用模型进行预测 四、注意事项 …

uniapp中APP上传文件

uniapp提供了uni.chooseImage&#xff08;选择图片&#xff09;&#xff0c; uni.chooseVideo&#xff08;选择视频&#xff09;这两个api&#xff0c;但是对于打包成APP的话就没有上传文件的api了。因此我采用了plus.android中的方式来打开手机的文件管理从而上传文件。 下面…

推陈换新系列————java8新特性(编程语言的文艺复兴)

文章目录 前言一、新特性秘籍二、Lambda表达式2.1 语法2.2 函数式接口2.3 内置函数式接口2.4 方法引用和构造器引用 三、Stream API3.1 基本概念3.2 实战3.3 优势 四、新的日期时间API4.1 核心概念与设计原则4.2 核心类详解4.2.1 LocalDate&#xff08;本地日期&#xff09;4.2…

树莓派5从零开发至脱机脚本运行教程——1.系统部署篇

树莓派5应用实例——工创视觉 前言 哈喽&#xff0c;各位小伙伴&#xff0c;大家好。最近接触了树莓派&#xff0c;然后简单的应用了一下&#xff0c;学习程度并不是很深&#xff0c;不过足够刚入手树莓派5的小伙伴们了解了解。后面的几篇更新的文章都是关于开发树莓派5的内容…

GPT Researcher 的win docker安装攻略

github网址是&#xff1a;https://github.com/assafelovic/gpt-researcher 因为docker安装方法不够清晰&#xff0c;因此写一个使用方法 以下是针对 Windows 系统 使用 Docker 运行 AI-Researcher 项目的 详细分步指南&#xff1a; 步骤 1&#xff1a;安装 Docker 下载 Docke…

【后端】【Django DRF】从零实现RBAC 权限管理系统

Django DRF 实现 RBAC 权限管理系统 在 Web 应用中&#xff0c;权限管理 是一个核心功能&#xff0c;尤其是在多用户系统中&#xff0c;需要精细化控制不同用户的访问权限。本文介绍如何使用 Django DRF 设计并实现 RBAC&#xff08;基于角色的访问控制&#xff09;系统&…

C#基础学习(五)函数中的ref和out

1. 引言&#xff1a;为什么需要ref和out&#xff1f; ​问题背景&#xff1a;函数参数默认按值传递&#xff0c;值类型在函数内修改不影响外部变量&#xff1b;引用类型重新赋值时外部对象不变。​核心作用&#xff1a;允许函数内部修改外部变量的值&#xff0c;实现“双向传参…

八纲辨证总则

一、八纲辨证的核心定义 八纲即阴、阳、表、里、寒、热、虚、实&#xff0c;是中医分析疾病共性的纲领性辨证方法。 作用&#xff1a;通过八类证候归纳疾病本质&#xff0c;为所有辨证方法&#xff08;如脏腑辨证、六经辨证&#xff09;的基础。 二、八纲分类与对应关系 1. 总…

【linux重设gitee账号密码 克隆私有仓库报错】

出现问题时 Cloning into xxx... remote: [session-1f4b16a4] Unauthorized fatal: Authentication failed for https://gitee.com/xxx/xxx.git/解决方案 先打开~/.git-credentials vim ~/.git-credentials或者创建一个 torch ~/.git-credentials 添加授权信息 username/pa…

绿联NAS安装内网穿透实现无公网IP也能用手机平板远程访问经验分享

文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 大家好&#xff0c;今天给大家带来一个超级炫酷的技能——如何在绿联NAS上快速安装cpolar内网穿透工具。想象一下&#xff0c;即使没有公网IP&#xff0c;你也能随时随地远程访问自己…

CSS 美化页面(一)

一、CSS概念 CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;是一种用于描述 HTML 或 XML&#xff08;如 SVG、XHTML&#xff09;文档 样式 的样式表语言。它控制网页的 外观和布局&#xff0c;包括字体、颜色、间距、背景、动画等视觉效果。 二、CS…

空转 | GetAssayData doesn‘t work for multiple layers in v5 assay.

问题分析 当我分析多个样本的时候&#xff0c;而我的seurat又是v5时&#xff0c;通常就会出现这样的报错。 错误的原因有两个&#xff1a; 一个是参数名有slot变成layer 一个是GetAssayData 不是自动合并多个layers&#xff0c;而是选择保留。 那么如果我们想合并多个样本&…

UE4学习笔记 FPS游戏制作17 让机器人持枪 销毁机器人时也销毁机器人的枪 让机器人射击

添加武器插槽 打开机器人的Idle动画&#xff0c;方便查看武器位置 在动画面板里打开骨骼树&#xff0c;找到右手的武器节点&#xff0c;右键添加一个插槽&#xff0c;重命名为RightWeapon&#xff0c;右键插槽&#xff0c;添加一个预览资产&#xff0c;选择Rifle&#xff0c;根…

【JavaScript】七、函数

文章目录 1、函数的声明与调用2、形参默认值3、函数的返回值4、变量的作用域5、变量的访问原则6、匿名函数6.1 函数表达式6.2 立即执行函数 7、练习8、逻辑中断9、转为布尔型 1、函数的声明与调用 function 函数名(形参列表) {函数体 }eg&#xff1a; // 声明 function sayHi…

硬件基础--05_电压

电压(电势差) 有了电压&#xff0c;电子才能持续且定向移动起来&#xff0c;所有电压是形成电流的必要条件。 电压越大&#xff0c;能“定向移动”起来的电子就越多&#xff0c;电流就会越大。 有电压的同时&#xff0c;形成闭合回路才会有电流&#xff0c;不是有电压就有电流…

ES数据过多,索引拆分

公司企微聊天数据存储在 ES 中&#xff0c;虽然按照企业分储在不同的ES 索引中&#xff0c;但某些常用的企微主体使用量还是很大。4年中一个索引存储数据已经达到46多亿条数据&#xff0c;占用存储3.1tb, ES 配置 由于多一个副本&#xff0c;存储得翻倍&#xff0c;成本考虑…

存储服务器是指什么

今天小编主要来为大家介绍存储服务器主要是指什么&#xff0c;存储服务器与传统的物理服务器和云服务器是不同的&#xff0c;其是为了特定的目标所设计的&#xff0c;在硬件配置方式上也有着一定的区别&#xff0c;存储空间会根据需求的不同而改变。 存储服务器中一般会配备大容…

golang不使用锁的情况下,对slice执行并发写操作,是否会有并发问题呢?

背景 并发问题最简单的解决方案加个锁,但是,加锁就会有资源争用,提高并发能力其中的一个优化方向就是减少锁的使用。 我在之前的这篇文章《开启多个协程,并行对struct中的每个元素操作,是否会引起并发问题?》中讨论过多协程场景下struct的并发问题。 Go语言中的slice在…

Java知识整理round1

一、常见集合篇 1. 为什么数组索引从0开始呢&#xff1f;假如从1开始不行咩 数组&#xff08;Array&#xff09;&#xff1a;一种用连续的内存空间存储相同数据类型数据的线性数据结构 &#xff08;1&#xff09;在根据数组索引获取元素的时候&#xff0c;会用索引和寻址公式…