Git 版控實用指令與觀念指南
Git 版控實用指令與觀念指南
本文件整理了常見的 Git 操作指令、觀念解析,以及如何管理專案版本、標籤與類似 SVN 的序號標記方式。
一、 初始化與首次 Commit 流程
當你在專案資料夾執行 git init 初始化後,標準的第一次 Commit 流程如下:
-
建立
.gitignore(避免不必要的檔案進入版控)- 將不需要追蹤的暫存檔、敏感設定(如
.env)寫入.gitignore。
- 將不需要追蹤的暫存檔、敏感設定(如
-
將檔案加入暫存區
# 加入指定檔案 git add a.php b.php c.php # 或加入全部合適的檔案 git add . -
執行第一次 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