如果你是開發者,一定聽過 Git,但可能還在「用了但不熟」的階段:只知道 add、commit、push 三板斧,一旦遇到分支衝突或想回滾版本就手足無措。Git 是當今軟體開發最重要的基礎設施之一——無論你寫 Python、Java 還是做網站運維,團隊協作、版本回溯、代碼審查都離不開它。今天就帶你從核心概念開始,實戰掌握 Git 版本控制。
一、為什麼每個開發者都該學 Git?
想象你正在寫一個股市數據抓取腳本,今天改了抓取邏輯,明天想比較「昨天能跑、今天壞掉」的差別——如果沒有版本控制,你只能靠 Ctrl+Z 或一堆 final_v2 這種檔案名苦撐。Git 解決的三個核心痛點:
- 版本回溯:任何時刻的代碼狀態都能找回,不怕改壞
- 平行開發:多人(或多條思路)可以同時工作,最後合併
- 安全備份:配合 GitHub、Gitee 等遠端倉庫,代碼多一份異地保險
重點:Git 不是「等需要時再學」的工具,而是寫代碼的基本姿勢。越早建立這個習慣,後面的項目就越穩。
二、核心概念:三個區域與三種狀態
理解 Git 的鑰匙是一句話:Git 在本地保存完整的歷史快照,不是只存「差異」。每個檔案在 Git 眼中都會流經三個區域:
工作目錄(Working Directory)
│ git add
▼
暫存區(Staging Area / Index)
│ git commit
▼
版本庫(Repository / .git)
步驟 1:git add 把檔案從工作目錄放入暫存區——相當於「選中要打包的檔案」。
步驟 2:git commit 把暫存區內容固化成一個不可變的版本快照——相當於「拍照存檔」。
特別注意:很多新手誤以為 git commit -a 或直接 commit 就能包含所有改動,其實未 add 過的新檔案永遠不會被提交。養成「先 add 後 commit」的習慣,你就贏過一半的初學者。
三、實戰第一步:初始化與第一次提交
假設你有一個股票分析項目,先進入目錄初始化倉庫:
cd stock-analyzer
git init
git status # 查看目前狀態:紅色 = 未追蹤或已修改
然後建立第一個提交:
git add . # 把目錄下所有檔案加入暫存區
git commit -m "初始化:加入行情抓取與分析腳本"
git log --oneline # 查看提交歷史
你會看到類似 a1b2c3d 初始化:加入行情抓取與分析腳本 的輸出。重點:提交訊息(commit message)要寫清楚「做了什麼、為什麼」,這份歷史是給未來的自己看的。
四、分支與合併:平行開發的藝術
分支(branch)是 Git 最強大的功能:你可以從主線「長出」一條新線,在上面實驗新想法,成功再合併回去,失敗就丟掉,完全不影響主線。
git branch feature/backtest # 建立分支
git checkout feature/backtest # 切換到分支(新版也可用 git switch)
# ... 在分支上寫回測程式碼 ...
git add . && git commit -m "新增:移動平均線回測"
git checkout main # 回到主線
git merge feature/backtest # 合併分支到主線
特別注意:合併時若兩條線都改了同一個檔案,Git 會跳出「衝突(conflict)」提示,檔案內會出現 <<<<<<< 與 >>>>>>> 標記。此時不要慌,手動選擇保留哪段代碼(或重新整合),刪除標記後 git add 再 commit 即可。衝突不是錯誤,而是 Git 在提醒你「這裡需要人類判斷」。
五、遠端協作:Push / Pull / Clone
本地玩得再熟,團隊協作才是 Git 的完整形態。以 GitHub / Gitee 為例:
git remote add origin https://github.com/yourname/stock-analyzer.git
git push -u origin main # 首次推送,-u 記住關聯關係
git pull # 拉取隊友的最新改動
git clone https://github.com/yourname/stock-analyzer.git # 複製他人倉庫
重點:推送前永遠先 git pull。很多人衝突就是因為「推之前沒拉」,本地和遠端各走各路,最後才硬碰硬。
六、兩個救命的撤銷技巧
實戰中最常遇到的問題就是「改壞了怎麼辦」。記住這兩個命令就夠:
- 還沒 commit:
git checkout -- 檔案名丟棄工作目錄的修改,回到最近一次提交的狀態 - 已經 commit 但推錯:
git reset --hard HEAD~1撤銷最近一次提交(HEAD~1指「上一個版本」)
特別注意:reset --hard 會永久丟棄未保存的改動,執行前務必三思。若改動已推送到遠端、且其他同事已經拉取,不要用 reset 改歷史,改用 git revert 產生一次「反向提交」會更安全。
七、總結
- Git 的三個區域(工作目錄 / 暫存區 / 版本庫)是理解一切命令的基礎
- 分支讓實驗與主線隔離,衝突是人類判斷的契機而非災難
- 遠端協作守則:先 pull 再 push,提交訊息寫清楚
- 撤銷分兩層:未提交用
checkout,已提交用reset或revert - 下一步建議:把 Git 指令背熟後,學習
git stash(暫存未完成的改動)、git rebase(整理提交歷史)、以及 GitHub Flow 工作流
互動話題:你在實際項目中用 Git 踩過哪些坑?是分支合併衝突、誤刪分支,還是 push 錯東西?歡迎在留言區分享你的「Git 血淚史」,一起交流避坑心得!