build Nyrdex

Git 版控實用指令與觀念指南

Git 版控實用指令與觀念指南

本文件整理了常見的 Git 操作指令、觀念解析,以及如何管理專案版本、標籤與類似 SVN 的序號標記方式。


一、 初始化與首次 Commit 流程

當你在專案資料夾執行 git init 初始化後,標準的第一次 Commit 流程如下:

  1. 建立 .gitignore(避免不必要的檔案進入版控)

    • 將不需要追蹤的暫存檔、敏感設定(如 .env)寫入 .gitignore。
  2. 將檔案加入暫存區

    # 加入指定檔案
    git add a.php b.php c.php
    
    # 或加入全部合適的檔案
    git add .
    
  3. 執行第一次 Commit

    git commit -m "initial commit: 專案初始檔案"
    

二、 處理分離頭部與主分支(HEAD 與 main)

如果在沒有預設分支的環境下直接 git commit,可能會發生漂浮在 HEAD 上的狀況,需要手動指定並建立主分支:

# 建立並切換到 main 分支,讓剛才的 commit 有家可歸
git branch -M main

三、 比對前後版本的檔案差異

使用 git diff 可以隨時檢視程式碼的修改歷程:

# 1. 比對「工作區尚未存檔的修改」與「最後一次 Commit」
git diff index.php

# 2. 比對「已經 git add 暫存的檔案」與「最後一次 Commit」
git diff --cached index.php

# 3. 比對「前一個版本」與「目前版本」的同一個檔案
git diff HEAD~1 HEAD index.php

四、 檢視最近的 Commit 檔案清單

# 列出最近 3 次 commit 的檔案清單與異動統計(最推薦)
git log -n 3 --stat

# 只顯示最近 3 次 commit 的檔案名稱清單
git log -n 3 --name-only

五、 空指標與 Tag 標記(如:手動上版紀錄)

Git 無法直接 commit 完全沒有檔案異動的「空內容」,但可以透過 Tag 或 Empty Commit 來達成記錄目的:

# 方法一:使用附註標籤(推薦,會自動記錄建立的日期、時間與說明)
git tag -a v1.0-prod -m "此版之前的,已經手動 sftp prod 了"

# 查看標籤與詳細資訊
git show v1.0-prod

# 方法二:強制產生一個空的 Commit
git commit --allow-empty -m "此版之前的,已經手動 sftp prod 了"

六、 模擬類似 SVN 或語意化版本(SemVer)編號

Git 不像 SVN 有全域遞增的直線序號,但可以透過指令動態達成:

# 1. 動態計算總 commit 數來當作流水號
git rev-list --count HEAD

# 2. 結合主版號與總 commit 數動態產生類似 v1.0.124 的版號
echo "1.0.$(git rev-list --count HEAD)"

# 3. 透過 git describe 追蹤距離上一個 Tag 的距離
git describe --tags

← 所有 Runbook 文章