F
章節導航

我常使用的 Git 命令與應用場景

Elog5 分鐘閱讀
核心精華與要旨 (TL;DR)

記錄常用 Git 命令與應用場景,強調觸發條件和關鍵注意事項。

在我那間終端微微發熱的房間裡,Git 是在不斷變化的工作狀態之間做判斷的核心邏輯。本文將這組命令按照能力分類,列出觸發條件、實際目的以及需要留意的點,方便日常以更技術化的方式審視每一次操作。

1. 檢查工作樹狀態

命令

git status -sb

觸發條件:進入工作目錄後、準備提交前或剛切換分支完成。

目的:快速確認當前 HEAD 所在分支、暫存區與工作區差異,以及是否跟遠端失聯。

關注點:預設輸出是概要,遇到暫存衝突或未跟蹤檔案時補充 git status,也可以加 -uno 過濾遠端分支資訊。

2. 精準暫存變更

命令

git add .
git add -p

觸發條件:工作中出現跨多個邏輯的改動,或者想保持每個提交語義清晰。

目的git add . 一次性準備全部改動;git add -p 則可以在 hunk 級別拆分、審查並暫存,將邏輯單元隔離。

關注點-p 進入互動模式,依次處理每個 hunk,適合把一份檔案的多個改動拆成不同提交;遇到大型改動可配合 git diff --cached 二次確認。

3. 形成語義化提交

命令

git commit -m "feat: add terminal command panel"

觸發條件:暫存區內容經過確認、準備將這部分變更寫入歷史。

目的:通過 type(scope): description 結構表達改動類別與範圍,便於線性回顧或自動化釋出。

關注點:描述應聚焦“為什麼”而非“做了什麼”,複雜變更可在正文中新增額外段落補充上下文。

4. 對比變更

命令

git diff
git diff --staged

觸發條件:提交前、覆盤 Bug 或檢視大改動範圍。

目的git diff 比較工作區與 HEAD,--staged 比較暫存區與 HEAD,兩者結合可以完整掌握當前影響面。

關注點:對比結果會顯示空格/行尾的微小差異,必要時加入 --word-diff--color-words 檢查邏輯變更。

5. 取消錯誤操作

命令

git restore path/to/file
git restore --staged path/to/file

觸發條件:誤修改檔案、錯誤地暫存或準備放棄某些改動。

目的:讓工作區或暫存區回到 HEAD 狀態,不汙染歷史的新提交。

關注點restore 不會刪除歷史,隻影響當前工作區;想徹底恢復舊檔案可配合 git checkout --(舊命令)。

6. 暫存未完成的進度

命令

git stash push -m "wip: dock polish"
git stash pop

觸發條件:需要臨時切換分支處理緊急任務、但尚未完成當前開發。

目的:將改動收進棧裡,保持當前分支幹淨,後續可繼續工作。

關注點pop 會嘗試自動合併到當前分支;若有多個 stash,使用 git stash list 檢視 ID,配合 apply <id> 精準恢復。

7. 與遠端保持一致

命令

git fetch origin
git pull --rebase
git push origin main

觸發條件:每天工作開始、上線前或準備提交前的最後一次同步。

目的fetch 更新遠端引用但不自動合併;pull --rebase 線性地將本地改動附加在遠端之後;push 將整理後的提交上傳到主幹。

關注點--rebase 會重寫本地提交,必須用 --force-with-lease 確保不覆蓋遠端其他協作者的提交。

8. 回顧歷史線索

命令

git log --oneline --graph --decorate -20
git blame path/to/file

觸發條件:想確認某行程式碼是誰寫的、或到底什麼時候引入的行為。

目的log 用圖形檢視來看演進軌跡,blame 精準到某行的最近提交。

關注點blame 主要顯示的是最後修改人的資訊,若懷疑是更早的改動,可結合 git show <commit> -- path/to/file 精確回溯。

9. 重寫歷史以提升可讀性

命令

git rebase -i HEAD~5

觸發條件:本地提交過多、含有亂七八糟的資訊,或希望合併/改寫提交資訊。

目的:互動式 rebase 允許把多個提交 squashfixup、重排序或改名,讓歷史成為一條幹淨的敘述。

關注點:完成操作後可能需要 git push --force-with-lease;編輯過程中要耐心確認每一步,drop 命令會直接丟棄相應提交。

10. 管理分支上下文

命令

git switch -c feature/terminal
git switch main

觸發條件:準備啟動新功能/實驗,或結束一個短期分支。

目的switch -c 將當前 HEAD 移到新分支,避免在主幹上直接搞實驗;switch main 可回到穩定提交線。

關注點:完成開發後不要忘記 git push --set-upstream origin feature/terminal,否則下一次 git switch 不會自動跟蹤遠端。


歷史重寫策略

互動式 rebase(編輯/壓縮)

  1. 執行 git rebase -i HEAD~4,定位要壓縮的最近提交。
  2. 將待合併提交前的 pick 改為 squash(保留提交資訊)或s, fixup(丟棄被合併的訊息)。
  3. 按提示編輯合併後的提交資訊,儲存退出即可完成歷史重寫。
  4. 所有步驟結束後,使用 git push --force-with-lease 推送變更,避免覆蓋遠端其他協作者的提交。

Soft reset + 重新提交

  1. 執行 git reset --soft <commit_id> 回到某個提交之前,暫存區仍保留現有內容。
  2. 使用 git add -u 將所有變更整合入暫存區。
  3. 執行 git commit -m "合併提交資訊",為這段變更生成一個新的提交。
  4. 再次用 git push --force-with-lease 更新遠端。

注意reset --soft 會移動 HEAD,當多人協作時,請先建立備份分支(例如 git branch backup/feature)或向隊友說明計劃。歷史重寫時務必確認沒有人依賴這些提交。

這些命令之所以常用,不是因為它們複雜,而是因為它們像日常生活中的杯子、門、鑰匙,早晚都要用到。把每一次變化寫清楚、放整齊,Git 就能在某個夜晚替你記住那段潮溼的時間。

宸極
宸極 先生

專精於太乙神數與高階術數之學。致力於以條理化與邏輯化的學術視角,為高階人士與企業主提供天時大運與局勢研判。