git 基礎指令:版本控制的核心操作
在現代軟體開發與系統管理領域中,Git 無疑是最受歡迎的分散式版本控制系統。無論你是撰寫程式碼的開發者,還是管理伺服器配置的 DevOps 工程師,掌握 Git 的核心操作都是必備技能。許多初學者往往被 Git 複雜的命令列介面嚇退,但其實只要理解其底層邏輯並熟練幾個核心指令,就能輕鬆掌控專案的歷史軌跡。本文將深入解析 Git 的基礎操作流程,幫助你建立穩固的版本控制觀念。
初始化與狀態檢查
一切從專案目錄開始。當你在 Ubuntu 22.04 或 Debian 12 上拿到一個全新的專案資料夾時,首先需要做的是初始化 Git 倉庫。這會在當前目錄下創建一個隱藏的 .git 資料夾,裡面存放了所有版本控制的元數據。
$ git init
Initialized empty Git repository in /home/user/myproject/.git/
初始化完成後,我們需要確認檔案的狀態。Git 將檔案分為三種狀態:未追蹤(Untracked)、已修改(Modified)和已暫存(Staged)。使用 git status 可以讓我們清楚知道目前的工作目錄狀況。
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
config.yml
nothing added to commit but untracked files present (use "git add" to track)
暫存區與提交歷史
Git 的核心概念在於「暫存區」(Staging Area)。在將變更正式記錄到歷史中之前,我們必須先將檔案加入暫存區。這一步提供了極大的彈性,允許我們選擇性地提交部分變更,而不是全盤提交。
使用 git add 將檔案加入暫存區,然後透過 git commit 建立一個新的提交記錄。建議每次提交都撰寫清晰的訊息,以便日後追溯。
# 將特定檔案加入暫存區
$ git add README.md config.yml
# 提交變更並註解訊息
$ git commit -m "Initial commit: add project structure"
[main (root-commit) a1b2c3d] Initial commit: add project structure
2 files changed, 15 insertions(+)
create mode 100644 README.md
create mode 100644 config.yml
若要查看歷史記錄,git log 是最常用的指令。加上 --oneline 參數可以簡化輸出,讓歷史軌跡一目了然。
$ git log --oneline
a1b2c3d (HEAD -> main) Initial commit: add project structure
分支管理與合併
在實際開發中,我們很少直接在主分支(main/master)上工作。建立分支(Branch)允許我們獨立開發新功能或修復 Bug,而不影響主線穩定性。
使用 git branch 查看現有分支,git checkout 或 git switch 切換分支。以下範例示範如何建立新分支、切換並進行提交。
# 建立並切換到新分支
$ git checkout -b feature-login
# 在 feature-login 分支上進行修改並提交
$ echo "Login logic added" >> app.py
$ git add app.py
$ git commit -m "Add basic login functionality"
# 切換回 main 分支
$ git checkout main
當功能開發完成且經過測試後,我們需要將分支的變更合併回主分支。使用 git merge 即可完成此操作。
# 在 main 分支上合併 feature-login
$ git merge feature-login
Updating a1b2c3d..b2c3d4e
Fast-forward
app.py | 5 +++++
1 file changed, 5 insertions(+)
合併後,若該分支已無用處,可使用 git branch -d 刪除它以保持倉庫整潔。
$ git branch -d feature-login
Deleted branch feature-login (was b2c3d4e).
常見問題與解決方案
1. 誤刪檔案後如何恢復?
若不小心刪除了檔案,但尚未提交,可以使用 git checkout -- <filename> 恢復工作目錄中的檔案至最後一次提交時的狀態。若已提交但想回退版本,可使用 git revert 或 git reset,但需注意 git reset 會改變歷史記錄,在團隊協作中應謹慎使用。
2. 合併衝突(Merge Conflict)怎麼處理?
當兩個分支修改了同一檔案的相同位置時,Git 無法自動合併,會標記為衝突。此時需手動開啟衝突檔案,尋找 <<<<<<<、======= 和 >>>>>>> 標記,選擇保留哪部分的程式碼,刪除標記後,重新 git add 並 git commit 即可解決。
小結
Git 雖然命令眾多,但核心操作不外乎「修改檔案」、「加入暫存區」、「提交變更」與「分支管理」。透過熟練 git status、git add、git commit、git branch 與 git merge 等指令,並理解其背後的工作流程,你就能自信地應對大多數的版本控制需求。建議在實際專案中多練習,並善用 git log 與 git diff 來監控專案狀態,讓版本控制成為提升開發效率的有力工具。