問題背景
#最近在團隊協作時遇到了 Git 分支管理的困擾,特此整理一份完整的工作流程筆記。
基礎指令速查
#日常操作
# 1
2
3
4
5
6
7
8
9
10
11
12
| # 查看狀態
git status
# 暫存變更
git add .
git add <file>
# 提交
git commit -m "feat: 新增功能"
# 推送
git push origin main
|
分支操作
# 1
2
3
4
5
6
7
8
9
10
11
| # 建立並切換分支
git checkout -b feature/new-feature
# 切換分支
git checkout main
# 合併分支
git merge feature/new-feature
# 刪除分支
git branch -d feature/new-feature
|
工作流程圖解
#Git Flow 模型
#1
2
3
4
5
| main ─────●─────────────●─────────────●───────
\ / /
develop ────●─────●───●─────●───●───●─────────
\ / \ /
feature ──────●─●─●─● ●─●─●
|
分支說明:
| 分支 | 用途 | 生命週期 |
|---|
main | 正式版本 | 永久 |
develop | 開發整合 | 永久 |
feature/* | 功能開發 | 短期 |
hotfix/* | 緊急修復 | 短期 |
常見問題解決
#問題 1:不小心提交到錯誤分支
#情境:在 main 分支上開發了功能,應該在 feature 分支
解決步驟:
1
2
3
4
5
6
7
8
| # 1. 建立新分支(保留目前的提交)
git branch feature/my-feature
# 2. 回到 main 分支的上一個狀態
git reset --hard HEAD~1
# 3. 切換到正確分支繼續工作
git checkout feature/my-feature
|
使用 git reset 回退提交
問題 2:合併衝突處理
#步驟:
- 找到衝突檔案(標記
<<<<<<<) - 手動編輯,選擇要保留的內容
- 刪除衝突標記
- 暫存並提交
1
2
3
4
5
6
| # 衝突標記範例
<<<<<<< HEAD
你的修改
=======
別人的修改
>>>>>>> branch-name
|
問題 3:誤刪分支救回
#1
2
3
4
5
| # 查看 reflog 找到刪除前的 commit
git reflog
# 從特定 commit 建立新分支
git checkout -b recovered-branch <commit-hash>
|
Commit Message 規範
#1
2
3
4
5
| <type>(<scope>): <subject>
<body>
<footer>
|
常用 Type
#| Type | 說明 | 範例 |
|---|
feat | 新功能 | feat: 新增登入功能 |
fix | 修復 Bug | fix: 修正計算錯誤 |
docs | 文件更新 | docs: 更新 README |
style | 程式碼格式 | style: 調整縮排 |
refactor | 重構 | refactor: 優化效能 |
test | 測試相關 | test: 新增單元測試 |
chore | 雜項 | chore: 更新依賴 |
實用技巧
#Alias 設定
#在 ~/.gitconfig 加入:
1
2
3
4
5
6
| [alias]
st = status
co = checkout
br = branch
ci = commit
lg = log --oneline --graph --all
|
忽略檔案模板
#.gitignore 範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| # IDE
.idea/
.vscode/
*.swp
# 依賴
node_modules/
vendor/
# 建置產物
dist/
build/
*.exe
# 環境變數
.env
.env.local
# 系統檔案
.DS_Store
Thumbs.db
|
團隊協作建議
#Pull Request 流程
#- 從
develop 建立 feature 分支 - 完成開發後推送到遠端
- 建立 Pull Request
- Code Review
- 合併回
develop
審查重點
#
參考資源
#
總結:Git 的核心在於理解分支與合併的概念,多練習就能熟練!