跳至正文

🌿 什麼是Git?

📖 定義

Git是分散式版本控制系統。它追蹤和管理程式碼變更歷史,並使多個開發者能夠同時工作。GitHubGitLabBitbucket是託管Git儲存庫的服務,使協作和程式碼共享變得容易。

🎯 用類比理解

遊戲存檔點

將Git比作遊戲的存檔系統:

  • Commit: 遊戲存檔 - 保存當前狀態
  • Branch: 平行世界 - 在保持主線的同時嘗試不同選擇
  • Merge: 合併平行世界 - 將好的結果應用到主線
  • Revert: 返回以前的存檔 - 犯錯時恢復

⚙️ 工作原理

Git的3個區域

Working Directory (工作目錄)
↓ git add
Staging Area (暫存區)
↓ git commit
Repository (儲存庫)
↓ git push
Remote Repository (遠端儲存庫)

Git工作流程

1. 修改檔案 (Working Directory)
2. 暫存更改 (Staging Area) → git add
3. 建立提交 (Local Repository) → git commit
4. 推送到遠端 (Remote Repository) → git push

💡 實際範例

基本Git命令

# 初始化Git儲存庫
git init
# 或克隆遠端儲存庫
git clone https://github.com/username/repo.git

# 檢查狀態
git status

# 暫存更改
git add index.html # 特定檔案
git add . # 所有檔案

# 建立提交
git commit -m "feat: 新增使用者登入"

# 推送(上傳)
git push origin main

# 拉取(下載)
git pull origin main

分支操作

# 檢查分支
git branch

# 建立新分支
git branch feature-login

# 切換分支
git checkout feature-login
# 或同時建立並切換
git checkout -b feature-login

# 最新方法 (Git 2.23+)
git switch feature-login
git switch -c feature-login

# 合併分支
git checkout main
git merge feature-login

# 刪除分支
git branch -d feature-login

協作場景

# === 開發者A ===
# 1. 克隆儲存庫
git clone https://github.com/team/project.git

# 2. 建立新功能分支
git checkout -b feature-payment

# 3. 編寫程式碼並提交
git add .
git commit -m "實作支付功能"

# 4. 推送到遠端
git push origin feature-payment

# 5. 在GitHub上建立Pull Request

# === 開發者B ===
# 1. 同步最新程式碼
git checkout main
git pull origin main

🤔 常見問題

Q1. Git和GitHub有什麼區別?

A:

Git (工具)
├─ 版本控制系統(軟體)
├─ 在本地電腦上執行
├─ 透過命令列(CLI)使用
└─ 免費、開源

GitHub (服務)
├─ Git儲存庫託管服務
├─ 基於Web的平台
├─ 協作功能(PR、Issue、Wiki)
└─ 程式碼共享和開源

類比: Git = 文字處理器, GitHub = Google文件

Q2. 如何寫提交訊息?

A: 遵循清晰一致的慣例:

# ✅ 好的提交訊息
git commit -m "feat: 新增使用者登入API"
git commit -m "fix: 解決註冊按鈕點擊錯誤"
git commit -m "refactor: 刪除重複程式碼並分離函數"

# ❌ 不好的提交訊息
git commit -m "更新"
git commit -m "修復bug"
git commit -m "進行中..."

# Conventional Commits規則
feat: 新功能
fix: 錯誤修復
docs: 文件變更
style: 程式碼格式化
refactor: 程式碼重構
test: 新增測試
chore: 建置、設定變更

Q3. Merge和Rebase的區別?

A:

# Merge
# - 按原樣保留分支歷史
# - 建立合併提交
git checkout main
git merge feature-login

結果:
A---B---C---D main
\ /
E-----F feature-login

# Rebase
# - 將分支移動到不同的基礎上
# - 保持線性歷史
git checkout feature-login
git rebase main

結果:
A---B---C---D main
\
E'---F' feature-login

# 何時使用?
Merge: 團隊協作、Pull Request
Rebase: 個人分支整理、清晰歷史

Q4. 如何解決衝突?

A:

# 發生衝突
git merge feature-login
# CONFLICT (content): Merge conflict in index.html

# 檢查衝突檔案
git status

# 開啟檔案手動解決
# <h1>最終標題</h1>

# 標記為已解決
git add index.html
git commit -m "Merge branch 'feature-login' - 解決標題衝突"

# 如需取消合併
git merge --abort

🎬 總結

Git是現代開發的必備工具:

  • 版本控制: 追蹤所有變更歷史
  • 協作: 多個開發者同時工作
  • 分支: 安全的實驗和功能開發
  • 恢復: 隨時返回以前的狀態

掌握Git可以自信地管理程式碼並與團隊高效協作! 🌿✨