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