開發者必備 Git 指令參考
從 clone、rebase 到 force-push 災難後救回——實際會用到的 Git 指令,附可複製貼上的寫法與一句話說明。

為什麼重要
新進工程師不小心對團隊 main 做了 git push --force,昨天的 commit 不見了。若能用 git reflog 救回,只要 30 秒——前提是你知道有這招。Git 語法嚴苛但安全網很多,多數開發者只用得到 10% 能力,因為詞彙停在 clone、commit、push。分類速查表是團隊能放進書籤、效益極高的參考之一。
三個實際場景
git rebase -i main 並 pick/squash。參考內有互動式 rebase 動詞說明。
主線歷史清楚
git bisect start good bad,每次測試標 good 或 bad,Git 會二分直到孤立問題 commit。
7 個 commit 內鎖定元兇
git reflog 列出每次 HEAD 移動;git reset --hard <reflog-id> 可還原。
避免災難
操作說明——使用參考
開啟 Git 指令參考。
依工作流程階段瀏覽
建置、每日 commit、分支管理、與遠端同步、改寫歷史、除錯、救援。
搜尋動詞
輸入「rebase」、「stash」或「cherry-pick」;符合的指令會帶著說明出現。
複製標準寫法
每則有一行「實際要打的」與帶選項的多行變體。
讀注意事項
許多條目會警告
--force語意、pull --rebase與預設 merge 的差異等。釘選常用指令
將分類(例如「改寫歷史」)加入書籤,壓力大時快找。
目標
Start a feature, save WIP, sync with main,
finish, push for PR.指令
git checkout -b feature/payment-retry
# work, work, work
git add . && git commit -m "WIP retry logic"
git fetch origin
git rebase origin/main
# fix any conflicts, then:
git push -u origin feature/payment-retry症狀
You ran `git reset --hard HEAD~5`
and now the last 5 commits seem gone.修復
git reflog # find the SHA before the reset
git reset --hard <SHA> # restore HEAD to it
實用技巧
- 用
git switch與git restore分擔checkout的負荷。switch管分支;restore管檔案。語意較清楚、較少誤操。 git log加--first-parent可摺疊 merge 雜訊,只看主線歷史。- 設定
pull.rebase = true讓git pull預設 rebase——減少功能分支上的「merge merge merge」commit。 - 最後一個 commit 用小修:
git commit --amend;較舊的用git rebase -i。推上共用分支後不要 amend。
常見陷阱
常見陷阱
Force push 洗掉同事工作
用 git push --force-with-lease 取代 --force:若遠端自你上次 fetch 後有變動會中止。務必優先;--force 留給確定只有你一人在用的分支。
常見陷阱
不小心把密鑰 commit 進去
用 git filter-repo(或 BFG Repo-Cleaner)改寫歷史移除檔案。然後立刻輪換外洩的密鑰。
常見陷阱
打 `git rebase main` 而不是 `git rebase origin/main`
可能對過期的本機 main rebase。一定要先 git fetch,或對明確的 origin/main rebase。
何時不適合用這套
- 視覺化分支圖——Lazygit、GitKraken 或 VS Code 的 Git Graph 比
git log --graph快得多。 - 程式碼審查——
git diff看得到差異,但 GitHub、GitLab、Gerrit 才追蹤留言與核准。 - 大型二進位檔管理——應用 Git LFS 或
git annex,不是純 Git。
FAQ
什麼是「快轉」(fast-forward)?
快轉合併把分支指標沿著沒岔開的 commit 線前移——不必產生 merge commit。常見於目標分支自你分支開出後尚未移動。
什麼時候用 `git stash`?
給真的隨時可丟的 WIP。要保留的工作寧可暫存在分支上的 wip commit——stash 很容易忘記而遺失。
reflog 會永久保存嗎?
不會。一般項目預設約 90 天到期,不可達的約 30 天。之後可能只剩 git fsck --lost-found 有機會救回。
下一步
- 下 Git 指令時可搭配 Linux 指令參考 查 shell 工具(grep、find、awk)。
- 用 URL 剖析工具 檢視遠端 URL 與埠號。
git push若出現 HTTP 錯誤(401、403、502)可對照 HTTP 狀態參考。