.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.pswp.cn/bicheng/74614.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74614.shtml
英文地址,請注明出處:http://en.pswp.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;會用索引和尋址公式…