Git 是每個開發者的必備技能,但很多人被它的指令嚇到。
「merge conflict」「detached HEAD」「fatal: refusing to merge unrelated histories」——這些錯誤訊息讓新手想直接砍掉重練。
這篇文章用最白話的方式,讓你 30 分鐘內搞懂 Git 的核心概念和常用操作。
Git 是什麼?為什麼要用?
Git 是一個版本控制系統。簡單說,它幫你:
- 記錄每次修改:像無限次的「復原」功能
- 多人協作:多個人可以同時修改同一個專案
- 實驗分支:想試新功能?開個分支,搞砸了也不影響主線
沒有 Git 的世界
project/
├── index_v1.html
├── index_v2.html
├── index_v2_final.html
├── index_v2_final_真的final.html
├── index_v2_final_這次真的是final.html
└── index_v2_final_老闆說改這版.html有了 Git,你只需要一個 index.html,所有歷史版本 Git 都幫你記著。
核心概念
Repository(倉庫)
一個專案的所有檔案和歷史記錄。分為:
- Local Repository:在你電腦上
- Remote Repository:在伺服器上(如 GitHub)
Commit(提交)
一個「存檔點」。每次 commit 就像在遊戲裡存檔,記錄當下所有檔案的狀態。
Branch(分支)
平行宇宙。你可以在不同分支上做不同的事,互不影響。最後可以合併(merge)。
三個區域
Working Directory → Staging Area → Repository
(工作目錄) (暫存區) (倉庫)
你正在改的檔案 準備要 commit 的 已經存檔的歷史安裝與設定
安裝
- Mac:
brew install git或裝 Xcode Command Line Tools - Windows:下載 Git for Windows
- Linux:
sudo apt install git
初始設定
# 設定你的名字和 email(會出現在 commit 記錄中)
git config --global user.name "你的名字"
git config --global user.email "your@email.com"
# 設定預設分支名稱為 main
git config --global init.defaultBranch main基本操作
建立新專案
# 在現有資料夾初始化 Git
cd my-project
git init
# 或從 GitHub 複製(clone)
git clone https://github.com/username/repo.git日常工作流程
# 1. 查看狀態(常用!)
git status
# 2. 把修改加到暫存區
git add filename.txt # 加單一檔案
git add . # 加所有修改
# 3. 提交(存檔)
git commit -m "簡短描述這次改了什麼"
# 4. 推送到遠端
git push查看歷史
# 查看 commit 歷史
git log
# 簡潔版
git log --oneline
# 圖形化顯示分支
git log --oneline --graph --all分支操作
為什麼需要分支?
想像你正在開發一個網站,老闆突然說要加個新功能。你不想在主線上亂改,於是:
- 開一個新分支
- 在新分支上開發
- 完成後合併回主線
# 查看所有分支
git branch
# 建立新分支
git branch feature-login
# 切換分支
git checkout feature-login
# 建立並切換(常用捷徑)
git checkout -b feature-login
# 合併分支(先切回 main)
git checkout main
git merge feature-login
# 刪除分支
git branch -d feature-login與遠端協作
連接遠端倉庫
# 查看遠端設定
git remote -v
# 加入遠端(通常叫 origin)
git remote add origin https://github.com/username/repo.git推送與拉取
# 推送到遠端
git push origin main
# 第一次推送設定上游分支
git push -u origin main
# 之後只需要
git push
# 從遠端拉取更新
git pull常見情境處理
情境 1:不小心改錯了,想復原
# 還沒 add:放棄工作目錄的修改
git checkout -- filename.txt
# 已經 add:從暫存區移除
git reset HEAD filename.txt
# 已經 commit:回到上一個 commit
git reset --soft HEAD~1 # 保留修改
git reset --hard HEAD~1 # 完全丟棄情境 2:Merge Conflict(合併衝突)
當兩個分支改了同一行,Git 不知道該用哪個,就會產生衝突。
<<<<<<< HEAD
這是你的修改
=======
這是別人的修改
>>>>>>> feature-branch解決方法:
- 手動編輯檔案,決定要保留哪個
- 刪除 Git 的標記(<<<、===、>>>)
- git add 和 git commit
情境 3:想暫存目前的工作
做到一半要切換分支,但還不想 commit:
# 暫存
git stash
# 切換分支、做別的事
# 取回暫存的工作
git stash pop情境 4:commit 訊息打錯了
# 修改最後一次 commit 的訊息
git commit --amend -m "新的訊息".gitignore
有些檔案不該加入 Git(密碼、編譯產物、node_modules)。建立 .gitignore 檔案:
# .gitignore 範例
# 環境變數(含密碼)
.env
# Node.js
node_modules/
# Python
__pycache__/
*.pyc
venv/
# 編譯產物
dist/
build/
# IDE 設定
.idea/
.vscode/
# 系統檔案
.DS_Store
Thumbs.db好的 Commit 訊息
格式建議
類型: 簡短描述(50 字以內)
詳細說明(選填,72 字換行)
相關 issue:#123常用類型
- feat:新功能
- fix:修 bug
- docs:文件更新
- style:格式調整(不影響程式邏輯)
- refactor:重構
- test:測試相關
- chore:雜事(更新套件等)
範例
feat: 新增會員登入功能
fix: 修正購物車數量顯示錯誤
docs: 更新 API 文件
refactor: 重構訂單處理邏輯GUI 工具推薦
如果指令讓你頭痛,可以用圖形介面:
- GitHub Desktop:最簡單,適合新手
- GitKraken:功能強大,介面漂亮
- Sourcetree:免費,功能完整
- VS Code 內建:已經夠用
快速參考表
| 情境 | 指令 |
|---|---|
| 初始化 | git init |
| 複製專案 | git clone [url] |
| 查看狀態 | git status |
| 加入暫存 | git add . |
| 提交 | git commit -m "訊息" |
| 推送 | git push |
| 拉取 | git pull |
| 新分支 | git checkout -b [name] |
| 切換分支 | git checkout [name] |
| 合併分支 | git merge [name] |
| 查看歷史 | git log --oneline |
結語
Git 的學習曲線確實陡峭,但掌握這些基本操作,日常工作已經足夠。
建議的學習路徑:
- 先會 add、commit、push、pull
- 學會分支和 merge
- 處理 conflict
- 探索進階功能(rebase、cherry-pick)
最重要的是:多用多練。搞砸了也沒關係,Git 本來就是讓你不怕搞砸的工具。