成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

找了一天找不到 Bug ? 試試 Git 的二分法吧!!!

開發 開發工具
你一定遇到過,一個很久沒修改過的功能,莫名其妙的出現了問題?肉眼查代碼、屢邏輯完全找不到問題點?前兩天還好好的功能,怎么這個今天就不行了?這兩天改動了這么多代碼,到底是那一次改動引發的 Bug?

[[213883]]

你一定遇到過,一個很久沒修改過的功能,莫名其妙的出現了問題?肉眼查代碼、屢邏輯完全找不到問題點?前兩天還好好的功能,怎么這個今天就不行了?這兩天改動了這么多代碼,到底是那一次改動引發的 Bug?

這樣非崩潰的 Bug,有時候想要排查出問題,并不是一件容易的事情。我想,這個時候你會需要 git bisect !

一、git bisect 基礎使用

git bisect 是 Git 提供的一種 二分法 的調試工具,它可以按照我們選定的提交,進行二分分割,快速定位出出錯的提交。來幫我們縮小最小改動的代碼,從而快速定位問題。

git bisect 其實很簡單,主要是基于幾個基本命令:

  • git bisect start:準備進行 bisect debug。
  • git bisect good:標記一個提交為 "good"。
  • git bisect bad:標記一個提交為 “bad”。
  • git bisect reset:退出 bisect debug 的狀態。

git bisect 涉及到的命令,非常的清晰簡單,下面舉個實際的例子,結合上面的解釋,就更清晰了。

二、git bisect 工作流

我自己生造出 6 個 commit,然后使用 git log 看看我的提交記錄。

這里假設我正常開發的階段,到 v6 提交的時候,突然發現有個 Bug ,無法定位到問題,但是能明確的知道,在 v1 提交階段,并沒有這個 Bug。

那么,在這樣的情況下,v6 就是一個有問題的版本,而 v1 則是一個好的版本,我們就可以借助 git bisect 來進行二分超找定位問題來自哪個提交。

還記得剛才的命令嗎?

我們先用 git bisect start 標記開始 bisect debug ,然后使用 git bisect good 和 git bisect bad 分別標記出正確的和錯誤的提交。

每個提交,都有一個針對這個提交唯一的 SHA-1 值,因為太長不方便輸入和閱讀,這里可以直接使用前幾位作為簡寫。

當標記處正確的和錯誤的提交之后,git bisect 立刻就可以幫我們定位出中間提交 v3。

現在 HEAD 就已經指向了 v3 提交的代碼了,這個可以使用 git status 查看當前的狀態。

所以我們可以基于 v3 版本的代碼,直接運行項目,測試看該提交是否有問題。

經過測試之后,發現 v3 的提交代碼版本,并沒有復現 Bug,那我們就可以縮小錯誤提交的范圍,大概落在了 v4、v5、v6 之間。

此時,我們只需要使用 git good 標記 v3 版本是正確的。 

標記好 v3 為 good 之后,立刻又會進行一次二分,此次標記的為中間提交 v5。

經過對 v5 提交的版本代碼,進行測試之后發現,它是有問題的。我們繼續使用 git bisect bad 對它進行標記。

當 v5 有問題的時候,現在只中間一個 v4 版本,所以會立刻指向 v4 提交。

我們繼續對 v4 版本的代碼進行測試,發現 v4 版本也有問題,繼續標記它為 bad 。

此時就很明確了,出錯的提交就是 v4,而 Git 也直接幫我們指出來出錯的提交。

雖然這里定位到,出錯的提交就是 v4 的問題,我們只需要仔細閱讀 v4 提交的代碼,然后定位出問題代碼,就達到了我們的目的。但是我們并不應該在 v4 提交上直接修改 Bug,我們應該退出 bisect debug 狀態,在***的提交版本上進行修改,這里使用 git bisect reset 退出,再進行修改即可。

到這里,就是 git bisect 的完整工作流程。

三、bisect的后悔藥

對提交進行 good 和 bad 的標記,都是人為來進行的,難免有出錯的情況。而提交比較少的時候,大不了就是 reset 之后,重頭來過。

但是如果有幾十個提交,再從頭進行一次 bisect 就比較麻煩了。Git 考慮到這一點,已經為我們配好了后悔藥。

想要擦除之前的標記狀態,就涉及到一個命令:

  • git bisect replay:重置到某個狀態。

replay 需要制定一個回退的點,這個點是需要使用 git bisect log > log.txt 輸出的 Log 文件, 我們需要通過修改這個 Log 文件,來確定回退的點。

舉個例子,我們使用 log 命令,輸出一個 log.txt 文件。

可以看到,這個 log.txt 文件,記錄了我們剛才所有的操作。

在這個例子中,假如我們的操作,對 v5 進行 bad 的這個標記錯了,那么,我們把這個操作之下的 Log 全部刪除掉,然后執行 git bisect replay log.txt。

這樣就將回退到判斷 v5 提交好壞的地方,重新進行標記。

在修改 Log.txt 文件的時候,***只執行刪除操作,不要對其中的順序有所修改,畢竟我們只是想要一個回滾的動作,并不是要改動我們之前的某些操作。

【本文為51CTO專欄作者“張旸”的原創稿件,轉載請通過微信公眾號聯系作者獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2023-12-27 23:30:50

2021-12-26 00:10:39

二分法排查版本

2018-06-15 14:26:42

2011-03-24 14:15:27

雙TOP二分法分頁

2021-10-19 09:59:25

二分法排序數組

2022-04-13 07:31:20

CAP定理分布式數據庫

2020-12-04 10:13:09

算法二分法效率

2020-11-29 17:11:52

程序員計算機開發

2020-07-27 10:05:10

馬云阿里巴巴印度

2022-04-28 20:12:44

二分法搜索算法

2009-12-03 10:26:24

PHP函數strrev

2022-03-18 08:37:12

二分查找算法元素

2009-11-30 18:46:51

PHP字符串顛倒順序

2021-03-17 08:37:23

算法性能分析遞歸算法遞歸樹

2016-09-09 08:27:16

2020-08-21 09:39:53

數據中心混合云技術

2021-06-02 10:23:06

索引B+樹數據

2011-03-24 13:31:35

2分法存儲過程分頁

2020-08-04 16:56:50

Java方法參數

2020-05-29 11:09:40

混合云云計算技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级在线免费观看 | 在线观看日韩精品视频 | 天天拍夜夜爽 | 在线观看国产h | 精品国产一二三区 | 国产精品久久久久久久久动漫 | 一区二区三区在线免费观看 | 精品婷婷 | 韩国av影院| 精品视频久久久久久 | 成人精品国产免费网站 | 日韩欧美在线视频 | 人人性人人性碰国产 | 91亚洲一区| 一级黄a| 男人的天堂在线视频 | 日韩高清成人 | www网站在线观看 | 亚洲一区二区三区四区在线观看 | 久久se精品一区精品二区 | 99久久99| 综合色婷婷 | 成人二区| www久久久 | 国内精品久久精品 | 欧美网址在线观看 | 中文字幕一区二区三区四区 | 久久伊人精品 | 久久91 | 91久久综合亚洲鲁鲁五月天 | 91毛片在线看| 久久久成人一区二区免费影院 | 久久久久久久综合 | 成人国产精品色哟哟 | 国产精品一区二区三区久久久 | 欧美一区二区三区日韩 | 亚洲一区二区av | 亚洲免费一区二区 | 啪啪免费 | 久久久久久女 | 成人看片在线观看 |