【Git】head, tag, commit, branch的關係 這是一個非常關鍵的 Git 理解核心:HEAD、tag、commit、branch 彼此的關係。我幫你用「定義 + 關聯圖 + 對照表 + 比喻」完整整理如下: ✅ 一張圖:理解 Git 中 HEAD、分支、Tag、Commit 的關係 HEAD ↓ ┌────────┐ │ branch │──┐ └────────┘ │ ↓ ┌────────────────┐ │ commit │◄──┐ └────────────────┘ │ ▲ │ ┌─────────┴──────┐ │ │ another │ │ │ branch │ │ └─────────────────┘ │ │ ┌─────────┐ │ tag │──► 同樣也指向 commit └─────────┘ 🧠 核心定義 名稱 定義說明 commit Git 的基本單位,是一個「版本快照」,有父子連結,不會變動 branch 指向某個 commit 的「可移動指標」,像捷徑,可以新增、移動 HEAD 代表你目前工作的「游標」,通常指向一個分支(或直接指向 commit) tag 指向某個 commit 的「不可變名稱」(常用來標記版本,如 v1.0.0) 🔗 它們的關係總結 關係 說明 branch ➝ commit 分支就是指向某個 commit 的「指標」 HEAD ➝ branch or commit HEAD 是你「目前所在的位置」,可以指向分支或直接指向 commit(detached HEAD) tag ➝ commit Tag 永遠指向某個 commit,是不可變的 commit 之間 commit 是鏈狀連結(每個有一個 parent commit) 📁 類比說明(像檔案系統) Git 概念 類比 說明 commit 檔案版本 是實際的內容快照(不可變) branch 資料夾捷徑 可以移動、可以新建、可以切換 HEAD 滑鼠游標 你目前的編輯焦點(在哪個捷徑/檔案上) tag 唯一標籤貼紙 永久貼在某個版本上,表示這是一個重要的版本點 📌 補充:變動性比較 元件 是否可變動 常見操作 commit ❌ 不可變 一旦建立就不會改變 branch ✅ 可變動 可以移動、刪除、重新建立 tag ✅ 可刪除(內容不可變) 可以刪除再重建,但本身是不可移動的指標 HEAD ✅ 一直在動 跟著你切換分支、commit 而變動 ✅ 常見操作對應關係 操作說明 HEAD 變動 branch 變動 commit 變動 tag 變動 git switch dev ✅ ❌ ❌ ❌ git commit ✅ ✅(會跟著 HEAD 一起動) ✅(新增) ❌ git reset --hard HEAD^ ✅ ✅ ✅(可能丟失) ❌ git tag v1.0 ❌ ❌ ❌ ✅ git checkout ✅(分離) ❌ ❌ ❌ git switch -c new-feature ✅ ✅(新建) ❌ ❌ ✅ 總結一句話: commit 是內容 branch/tag 是「名字」,用來指向某個 commit HEAD 是「你目前在哪裡」,通常跟著分支動,也可以離開分支進入 detached 狀態