Andy的前後端技術筆記、生活紀錄
Git的尋找bug小技巧
發佈於: 2024-07-07 更新於: 2024-07-07 分類於: frontend

在專案中碰到 bug 怎麼辦

在開發時,有時候可能會發現某個功能有bug,但是這個功能是先前舊的 commit 到 git 上的,
但是無法確定該bug是從哪個時間點發生的,這要怎麼處理?
可以透過 git bisect

使用 git bisect

這個是幹嘛的?
他可以對 git 的 commit 標記,可以標記bad / good,也就是說你可以透過2分法的方式來標記哪修個 commit 是好的以及壞的,
當你標記完之後 git 會自動幫你跳到這兩個commit 中間的commit,此時你就可以繼續測試確認該commit 是否是好的,標記完後,他就會再幫你跳到下一個 commit 中間的 commit,以此2分法的方式一路找到有問題的commit。

範例

以下 a 是最舊的 commit,d 是最新的commit。
a -> b -> c -> d

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
git bisect start
# 先啟動 bisect 功能
# 如果有確認的 commit 是好的可以先跳到高commit,假設 a 是好的
git checkout a
git bisect good
# 此時使用 git log 會看到被標記為 good commit

git log --all
# 透過 --all 看到所有commit,跳到可能的最近的一個有問題的commit,假設 d 是壞的
git checkout d

git bisect bad
# 此時git 會跳到中間的 commit ,你就可以測試以確定該 commit 狀況

# 重複的方法直到找到問題的 commit
# 找到後即可以把 bisect 功能停止
git bisect reset
--- 到底拉 The End ---