Я сделал исправление для файла и передал его в мой репозиторий git
.
Некоторое время спустя я обнаружил, что он регрессировал. Я хотел знать, в какой фиксации исправления были вывезены, поэтому я попробовал git bisect
и git log --all -S TERM
, где "TERM" была строкой, добавленной моим исправлением и которая больше нигде не появилась в проекте.
Я обнаружил, что git bisect
обвиняет несвязанный git log --all -S TERM
, и я обнаружил, что git log --all -S TERM
только перечисляет коммит, в котором я добавил TERM, и не перечислял никаких коммитов как удаляющих его, хотя это не было дольше в файле на "master".
После некоторого ручного поиска я обнаружил, что между двумя ветвями произошло слияние. У одной ветки было мое исправление, а у одного - нет. Автор слияния выбрал ветку без моего исправления (странно, поскольку в файле не было конфликта).
Мои вопросы:
- Почему
git bisect
не может найти изменения слияния? Я не вижу ничего в manpage об этом ограничении. Есть ли другой способ использовать его, чтобы найти плохое слияние в приведенном выше сценарии? - Почему
git log --all -S TERM
неgit log --all -S TERM
слияния? В manpage говорится, что в нем перечисляются коммиты, которые "вводят или удаляют экземпляр". Это объединение слияния не удаляет мою строку? Есть ли другой способ использовать его, чтобы найти плохое слияние в приведенном выше сценарии? - Если
git bisect
иgit log -S
бесполезны в приведенном выше сценарии, что является эффективным способом найти плохое слияние? Мне очень долго нужно отслеживать изменение, о котором идет речь, без этих инструментов.