Git for QA — Branch / PR review / cherry-pick / bisect 抓 regression 的實戰
QA 必備 Git 完整指南。Branch / merge / rebase 差別、Code review 怎麼看、cherry-pick 救 hotfix、git bisect 二分查 regression、reflog 救 commit。
💡 本文原刊於 qa.9niche.com,2026-08 併入 9niche.com 懶人包,內容照原文完整搬遷。
目錄
1. 前言
「Git 是 dev 的事」是 5 年前的觀念。現在 QA 不會 Git 等於少一半戰力 — 看不懂 PR、找不到 regression commit、救不回手滑的測試。這篇是給 QA 的實戰 Git 指南。
2. QA 為什麼要會 Git
不會 Git 的 QA = 每件事都要等 dev 處理。
3. 第一張地圖:Git 的 4 個區域
| 區域 | 內容 | 怎麼進去 |
|---|---|---|
| Working | 你正在編輯的檔案 | 直接改 |
| Staging | 準備 commit 的內容 | git add |
| Local | 你的 commit | git commit |
| Remote | 雲端版本 | git push / git pull |
核心:每次想做事前先問「我在哪個區域、要去哪個」。
4. QA 每天用的 20 個指令
看狀態
git status # 我現在在哪、什麼變了
git log --oneline -10 # 最近 10 個 commit
git log --graph --oneline # 視覺化 branch
git diff # 我改了什麼還沒 add
git diff --staged # 我 add 了什麼還沒 commit
git diff main # 跟 main 差什麼
切 branch
git branch # 列所有 branch
git branch -a # 含 remote
git checkout -b feature/x # 建 + 切到新 branch
git checkout main # 切回 main
git switch main # 新版指令(同 checkout)
寫 code
git add tests/test_login.py # stage 單檔
git add tests/ # stage 整個資料夾
git commit -m "test: add login flaky check"
git push origin feature/x # 推到 remote
Pull 別人的 code
git fetch # 抓 remote 更新(不 merge)
git pull origin main # fetch + merge
git pull --rebase # 用 rebase 取代 merge
救手滑
git restore tests/login.py # 丟掉某檔的修改
git restore --staged file # 把 staged 還原回 working
git reset HEAD~1 # 取消最後 1 個 commit(保留改動)
git reset --hard HEAD~1 # 取消 + 丟掉改動(危險)
5. QA 最強 4 招
招式 1: git log 進階 — 找 regression commit
# 找誰改了 login.py
git log --follow tests/login.py
# 找這禮拜的改動
git log --since="1 week ago" --oneline
# 找 Alice 改的 E2E test
git log --author=alice -- tests/e2e/
# 找改了「login」字串的 commit
git log -S "login" --oneline
# 找改了 LoginPage class 的 commit
git log -G "class LoginPage" --oneline
# 看某 commit 改了什麼
git show abc1234
# 看某 commit 改了哪些檔案
git show --stat abc1234
招式 2: git diff — 對比兩個版本
# 對比 main 跟 staging branch
git diff main..staging
# 對比這個 PR 改了什麼
git diff main...feature/login
# 看哪些檔案改了
git diff --name-only main..staging
# 對比兩個 commit
git diff abc1234..def5678
# 對比兩個 tag
git diff v2.4.0..v2.4.1
QA 發版前一定要看 git diff lastrelease..main 確認 scope。
招式 3: git bisect — 二分查 regression(神技)
實際操作:
# 1. 知道現在壞、上版好
git bisect start
git bisect bad HEAD
git bisect good v2.4.0
# 2. Git 自動切到中間 commit
# 這時跑你的測試
npm run test:e2e:login
# 3. 結果回報
git bisect bad # 如果還壞
# 或
git bisect good # 如果好
# 4. 重複 2-3 直到找到
# 最後 Git 會說「abc1234 is the first bad commit」
# 5. 結束
git bisect reset
10 個 commit 之中找出壞的、只要測 log2(10) ≈ 4 次。
招式 4: git cherry-pick — Hotfix 走小路
某個 bug 修在 main、要 backport 回 release branch:
# 在 main 上的修復 commit
git log main --oneline
# abc1234 fix: payment race condition
# 切到 release branch
git checkout release/v2.4
# 把那個 commit 「挑」過來
git cherry-pick abc1234
# push 出去
git push origin release/v2.4
Cherry-pick 是 hotfix 工作流的核心。
6. QA review PR 的 5 個重點
看 diff 的順序
- 整體 file 數:改 50 個檔案的 PR = 要拆
- 新檔案 vs 修改檔案:新功能 vs 改舊行為
- Test 檔有沒有跟著改:沒有 = 退回
- API / schema 改動:標 breaking change
- dependency / config:注意 security 與部署影響
Comment 的好習慣
不要只說「LGTM」。
✅ 好的 comment:
「這個 case 沒測 timeout 情境,我來補一個」
「這 schema 改動會 break v1 client,需要 deprecation period」
「flaky test 可能來自這個 race condition」
❌ 沒幫助的 comment:
「LGTM」
「+1」
「ok」
7. 救命招:`git reflog`
# 看你最近做過的所有「動作」
git reflog
# 輸出像這樣:
# abc1234 HEAD@{0}: reset: moving to HEAD~1
# def5678 HEAD@{1}: commit: my important test
# ...
# 救回 commit
git reset --hard def5678
90% 的「Code 不見」都能用 reflog 救。
8. Branch 策略對 QA 的影響
QA 要會分辨:
- Bug 在 feature branch → 該 PR 退回 dev 修
- Bug 在 staging → 開 fix PR、merge 回 staging + cherry-pick main
- Bug 在 prod → 開 hotfix branch、修完同時 cherry-pick 給 staging / main
9. 三種常見 workflow
QA 要做的事不同:
| Workflow | QA 重點 |
|---|---|
| Git Flow | Release branch 跑 full regression、長期維運 |
| GitHub Flow | 每 PR 跑 CI、staging 短期測試 |
| Trunk-based | 在 prod 用 feature flag 測、shift-right 取向 |
10. 進階:3 個救命指令
1. git stash — 半途切走
# 改一半要切去看別的 branch
git stash # 暫存
git checkout other # 切走
# 看完...
git checkout original # 切回
git stash pop # 拿回剛剛改的
2. git revert — 安全的撤銷
# 不要用 reset、改用 revert(不改 history)
git revert abc1234 # 產生一個「撤銷 abc1234」的新 commit
git push # 安全推上去
已推到 remote 的 commit 一律用 revert、不用 reset。
3. git blame — 看每行誰寫的
git blame tests/login.py
每行顯示:commit、作者、時間。找到 regression 後找誰一起 debug。
11. 反模式(QA 常踩的雷)
1. Force push 到共享 branch
# ❌ NEVER
git push --force origin main
# ✅ 用 --force-with-lease(被別人 push 後會擋住)
git push --force-with-lease origin feature/x
2. Rebase 已 push 的 branch
已 push 的 commit 不要 rebase。會把別人的 history 搞壞。
3. Conflict 不知道怎麼解
<<<<<<< HEAD
我的版本
=======
別人的版本
>>>>>>> branch-x
步驟:
- 看
<<<跟>>>之間是兩邊版本 - 決定留哪個、或合併
- 刪掉
<<<===>>>marker git add該檔git rebase --continue或git merge --continue
12. Commit message 規範(QA 也要遵守)
type(scope): one-line summary
[optional body]
[optional footer]
常用 type:
feat:新功能fix:bug 修復test:加 / 改測試(QA 最常用)docs:文件refactor:重構chore:雜事
QA 範例:
test(login): add flaky-check for connect timeout
Repro 3 次 100% fail,加 30s timeout retry guard。
Related: #1042
13. 工具
| 工具 | 用途 |
|---|---|
| VS Code GitLens | 看 blame、history、PR |
| GitHub Desktop | 視覺化 GUI、新手友善 |
| Sourcetree | Atlassian 的 GUI |
| lazygit | Terminal UI 神器 |
| git-revise | 安全 rebase |
| gh CLI | GitHub CLI、PR 從 terminal |
14. 給 QA 的 5 句
- Git 不會 = 永遠等 dev
- bisect 救你 80% 的 regression debug 時間
- 手滑都能 reflog 救、別 panic
- conflict 不可怕、看 marker 就好
- 每天用 5 個指令、3 個月就熟
15. 最後
Git 是 QA 最被低估的技能。不會 → 每件事卡 dev;會了 → 你能自己找 regression、Review PR 講重點、救手滑。每天花 10 分鐘練、一個月後你會發現 Git 變成你的第二語言。
相關連結
給 QA 的 SQL 完整指南。為什麼 QA 要會 SQL、SELECT/WHERE/JOIN 基本、debug 用 query 範本、效能注意事項、安全紅線(千萬別在 prod 跑 DELETE)。
給 QA 的 accessibility 測試完整指南。WCAG 2.2 等級、自動化工具(axe / Lighthouse)、手動 checklist、Screen reader 測試、法規(EAA / ADA / EU AI Act)對 QA 的影響。
一份不被退回的 bug report 該長什麼樣。Title / 重現步驟 / 預期 vs 實際 / 環境 / 影響 / 證據 / 優先級 / 相關連結,附完整範例與爛 vs 好對比。
相關懶人包
2026 QA 趨勢實戰:我看到的 5 個轉變(AI、Shift-Left、Observability)
從手動 QA 到 AI 輔助、從測試金字塔到測試獎盃。這篇分享我這 10+ 年看 QA 從「測完才知道」到「shift-left + AI」的真實觀察。
2026 QA 面試的 AI 題 — 12 題 + 答題框架(面試官想聽什麼)
2026 QA 面試新增一整類「你怎麼用 AI」的問題。這篇整理 12 個高頻 AI 面試題、每題附面試官真正想聽的點與答題框架,從「你用過哪些 AI 工具」到「AI 生的 test 怎麼信任」。
AI / LLM 功能 Spec Review — 幻覺 / 評估 / 成本 / 法遵 8 個必問
AI 功能 spec review 完整指南。LLM 不確定性處理、評估指標、Prompt versioning、成本控制、安全護欄、法遵(EU AI Act / GDPR)、Fallback、人工 review 流程。
一般聲明
本站提供之資訊僅供參考,不保證其完整性與正確性。使用者應自行判斷資訊之適用性。