Я искренне верю, что иметь один коммит по одной проблеме — это хорошая практика. Я уверен, что читал это где-то в статье типа «Лучшие практики».
Таким образом, мой рабочий процесс был следующим:
- Для новой проблемы я создаю новую локальную ветку с
git checkout -b new-issue
. - Зафиксируйте в нем все изменения. Иногда это требует множества коммитов.
- Когда закончу, я
squash
коммитов иrebase
их в текущую тематическую ветку. - Если что-то пойдет не так, я могу
git revert
зафиксировать, найти ошибку, исправить ее и закоммитить новый патч в тематическую ветку. Я не буду менять историю удаленного репозитория.
Но сегодня я был удивлен, услышав следующий рабочий процесс:
- Создайте новую ветку для новой проблемы.
- Вложите в него все.
- Используйте
merge --no-ff
, чтобы объединить ветку задачи с тематической веткой (так что у нас будет «слияние-фиксация», которую мы можемrevert
). - Если что-то пойдет не так, мы можем использовать
git bisect
, чтобы найти ошибку.
Согласно 1-му подходу у нас будет чистая git-история, и мы не будем иметь ни малейшего представления об использованных во время разработки оверхед-ветках.
Согласно второму подходу у нас будет очень запутанная история, с кучей некрасивых, ненужных слияний и коммитов только для одной задачи. Однако мы можем использовать git bisect
для поиска ошибок. (Возможно, это лучше для рефакторинга?)
Какие плюсы и минусы вы видите для обоих подходов?
Какой подход вы используете и почему?
Использовали ли вы на практике
git bisect
для поиска ошибок? (Я не…)
--first-parent
дляgit log
, чтобы скрыть отдельные коммиты в объединенных ветвях. Совсем не грязно. - person Zaz   schedule 09.07.2014