[TOC] #### .git 目錄內(nèi)容 --- 本文記錄平時(shí)開發(fā)中遇到的 .git 目錄下的內(nèi)容及其作用,持續(xù)更新 ! ``` .git ├── COMMIT_EDITMSG ├── FETCH_HEAD ├── HEAD ├── ORIG_HEAD ├── TAG_EDITMSG ├── config ├── description ├── hooks │ ├── applypatch-msg.sample │ ├── ... ├── info │ └── exclude ├── objects │ ├── info │ └── pack └── refs ├── heads └── tags ``` #### .git/COMMIT_EDITMSG --- 保存著最近一次的提交信息,git 不會(huì)用到這個(gè)文件,只是給用戶一個(gè)參考 ![](https://img.itqaq.com/art/content/2332c60dd3e2859b937406a6c3b7f817.png) #### .git/FETCH_HEAD --- 當(dāng)我們執(zhí)行 `git fetch` 時(shí)會(huì)自動(dòng)創(chuàng)建這個(gè)文件 執(zhí)行 `git pull` 也會(huì)創(chuàng)建這個(gè)文件,因?yàn)?`git pull` 相當(dāng)于 `git fetch && git merge` FETCH_HEAD 是一個(gè)短暫的 ref,用于記錄從遠(yuǎn)程庫(kù)拉取下來的內(nèi)容。 git pull 首先調(diào)用 git fetch 從遠(yuǎn)程庫(kù)獲取分支, FETCH_HEAD 指向分支的尖端(也就是該文本內(nèi)容的第一行是當(dāng)前分支),然后調(diào)用 git merge 合并 FETCH_HEAD 到當(dāng)前分支 #### .git/HEAD --- `.git/HEAD` 該文件中記錄了當(dāng)前指針指向的是哪個(gè)分支 ``` # 當(dāng)前在 master 分支 ref: refs/heads/master # 當(dāng)前在 liang 分支 ref: refs/heads/liang ``` #### .git/ORIG_HEAD --- 使用 `git merge <branch>` 合并分支,會(huì)產(chǎn)生這個(gè)文件 因?yàn)楹喜⒎种莻€(gè)比較危險(xiǎn)的操作,所以 git 提供了 ORIG_HEAD 這個(gè)文件,讓其進(jìn)行版本回滾 ``` git reset --hard ORIG_HEAD ``` #### .git/TAG_EDITMSG --- 執(zhí)行下面命令會(huì)進(jìn)入 vi 編輯模式,讓輸入標(biāo)簽描述,如果不填寫內(nèi)容,使用 `:wq` 推出會(huì)生成該文件 ``` git tag -a v1.0.0 ``` 查看文件內(nèi)容 ``` $ cat .git/TAG_EDITMSG # # Write a message for tag: # v1.0.0 # Lines starting with '#' will be ignored. ``` #### .git/config --- ![](https://img.itqaq.com/art/content/db3ce3fe305dd60bae61f758e271303f.png) #### .git/description ---- 用于在 GitWeb 中展示項(xiàng)目的描述信息,GitWeb 是 git 版本庫(kù)的圖形化 web 瀏覽功能 在 [git 官方文檔](https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain?spm=a2c6h.12873639.article-detail.8.59246941pSdNro "abcde")中有以下描述: ``` # description 僅由 GitWeb 程序使用,所以不用擔(dān)心 The description file is used only by the GitWeb program, so don’t worry about it. ``` 安裝 lighttpd ``` brew install lighttpd ``` 啟動(dòng) lighttpd 服務(wù) ``` git instaweb --start ``` 打開瀏覽器訪問 `http://127.0.0.1:1234` ![](https://img.itqaq.com/art/content/38ad309a9064b59306c859ea5ac274c4.png) 這段話就是 `.git/description` 文件的內(nèi)容,可以編輯這個(gè)文件內(nèi)容來讓 GitWeb 描述更友好。除此之外沒發(fā)現(xiàn)其它用處。 ``` Unnamed repository; edit this file 'description' to name the repository. ``` #### .git/refs/* ---- `git/refs/heads/*` 記錄本地分支的指針指向的是哪一個(gè) `commit id` ![](https://img.itqaq.com/art/content/ea0e6ddd0137eebcdf1d6712ef94337a.png) `git/refs/remotes/*` 記錄遠(yuǎn)程分支的指針指向的是哪一個(gè) `commit id` ![](https://img.itqaq.com/art/content/c6ffb75392ff0bc00ce50ecf05da674c.png) `git/refs/tag/*` 記錄本地標(biāo)簽對(duì)應(yīng)的哪一個(gè) `commit id` ![](https://img.itqaq.com/art/content/a256777b167b08bf1dc01f78781c9268.png) #### 相關(guān)文章推薦 --- [.git文件夾探秘,理解git運(yùn)作機(jī)制【阿里云開發(fā)者社區(qū)】](https://developer.aliyun.com/article/716483#slide-7 ".git文件夾探秘,理解git運(yùn)作機(jī)制【阿里云開發(fā)者社區(qū)】")