git によって管理されるコード リポジトリでは、新しいバグが発見された場合、「git bisect」を使用してバイナリ検索を実行し、バグを引き起こしたコミットを見つけることができます。これは、特に Linux、KVM、QEMU などのオープン ソース コミュニティで最も一般的に使用される方法です。
バグが修正された場合、「git bisect」を使用してバグを修正したコミットをバイナリ検索することもできます。ただし、「git bisect」は元々、バグを修正する良い点ではなく、バグを引き起こす悪い点を見つけるために使用されるため、「git bisect」を使用してバグを修正する点を見つけると、GIT ツールから次のエラー メッセージが表示される場合があります。
[root@jay-linux qemu.git]# git bisect start # commit-4b274b160 is newer than commit-079944e6. [root@jay-linux qemu.git]# git bisect good 4b274b160 [root@jay-linux qemu.git]# git bisect bad 079944e6 Some good revs are not ancestor of the bad rev. git bisect cannot work properly in this case. Maybe you mistake good and bad revs?
この状況に遭遇した場合は、別の方法で考えることができます。「git bisect」は新しいコミットを不良としてマークし、古いコミットを良好としてマークする場合にのみ適しているため、「git bisect」で良いとみなされるポイントは次のとおりです。悪い点は悪いとマークされ、悪い点は「良い」とマークされ、最後の「最初の悪いコミット」を見つけることは、実際にはバグを修正する「最初の良いコミット」と同じです。
本当に、こういう問題はちょっと考え方を変えるだけで解決できるんです、「常識にとらわれずに考える」ことの大切さを改めて実感しました。
以下は、「git bisect」の使用法を示す例としての qemu.git です:
[root@jay-linux qemu.git]# git bisect reset Already on 'master' [root@jay-linux qemu.git]# git bisect start [root@jay-linux qemu.git]# git bisect good 079944e6 [root@jay-linux qemu.git]# git bisect bad 4b274b16 Bisecting: 55 revisions left to test after this (roughly 6 steps) [83f58e570f21c3e7227e7fbef1fc0e18b5ed7ea9] rtl8139: preserve link state across device reset [root@jay-linux qemu.git]# git bisect good Bisecting: 27 revisions left to test after this (roughly 5 steps) [4a4343671e183824a3f5db76ad561ce01e6c6e0a] usb/ehci: Move capsbase and opregbase into SysBus EHCI class [root@jay-linux qemu.git]# git bisect good Bisecting: 13 revisions left to test after this (roughly 4 steps) [507066f8a9610c0088df19ce7b3e436f43165ec1] qdev: Include qdev code into *-user, too [root@jay-linux qemu.git]# git bisect bad Bisecting: 8 revisions left to test after this (roughly 3 steps) [c3dd94b129e222e00a4ed00689e11afdd85c740f] Merge remote-tracking branch 'stefanha/net' into staging [root@jay-linux qemu.git]# git bisect good Bisecting: 4 revisions left to test after this (roughly 2 steps) [89eb147c2cfd2c797d3662aa2f55254441f0595a] uhci: stop using portio lists [root@jay-linux qemu.git]# git bisect bad Bisecting: 1 revision left to test after this (roughly 1 step) [358d615b6908b4916c74819ffad823cb4a74314e] exynos4210: Add EHCI support [root@jay-linux qemu.git]# git bisect bad Bisecting: 0 revisions left to test after this (roughly 0 steps) [aee7499a59d6778c10b018da41db4a22655ef8a8] usb/ehci: Add SysBus EHCI device for Exynos4210 [root@jay-linux qemu.git]# git bisect bad aee7499a59d6778c10b018da41db4a22655ef8a8 is the first bad commit commit aee7499a59d6778c10b018da41db4a22655ef8a8 Author: Jay <just for fun> Date: Sun Dec 16 04:49:45 2012 +0100 ### just for testing. ### :040000 040000 a9ea5da3b5b85d86701f78608405504e9a4de905 0bb166863c84186202c639aff92dd326f1021d42 M hw