Предположим версия 2.6.18 вашего проекта работала, но версия в ветке master падает. Иногда самый лучший способ найти причину этой регрессии(проблемы) это выполнить брут-форс поиск сквозь всю историю проекта, чтобы найти тот коммит который вызывает крах приложения. Команда git bisect поможет вам в этом:
$ git bisect start
$ git bisect good v2.6.18
$ git bisect bad master
Bisecting: 3537 revisions left to test after this
[65934a9a028b88e83e2b0f8b36618fe503349f8e] BLOCK: Make USB storage depend on SCSI rather than selecting it [try #6]
Если вы выполните "git branch" в этот момент, вы увидите что git переместил вас временно в новую ветку с имененм "bisect". Эта ветка указывает на коммит (коммит с id 65934...) который можно достичь из ветки "master" но не из v2.6.18. Скомпилируйте и протестируйте его, и узнайте падает ли программа. Положим что да, тогда:
$ git bisect bad
Bisecting: 1769 revisions left to test after this
[7eff82c8b1511017ae605f0c99ac275a7e21b867] i2c-core: Drop useless bitmaskings
Извлекает старую версию. Продолжайте в этом духе, уведомляя git на каждом этапе что версия которую вы пробуете нормальная или проблемная, и заметьте что число повторных просмотров оставшихся для тестирования уменьшается приблизительно наполовину каждый раз.
После приблизительно 13 тестов (в этом случае), вы получите в результате id коммита-виновника аварий. Вы можете затем исследовать коммит с помощью git show, чтобы найти того кто создал его, и написать отчет об ошибке с id коммита. В заключении выполните
$ git bisect reset
чтобы вернуть вас в ветку в которой вы были до этого и удалить временную ветку "bisect".
Заметьте что версия которую git-bisect извлекает для вас на каждом этапе просто предположение, и вы свободны попробовать другую версию если вы думаете это хорошая идея. Например, иногда вы приземлитесь на коммит который ломает что то неопределенное; выполните
$ git bisect visualize
которая выполнит gitk и укажет выбранный ею коммит маркером который говорит "bisect". Выберите безопасно выглядящий коммит рядом, отметьте id этого коммита, и извлеките его выполнив:
$ git reset --hard fb47ddb2db...
затем протестируйте, выполните "bisect good" или "bisect bad" как более подходящее, и продолжите.