Работая над исправлением или функцией, я иногда сталкиваюсь с другими крошечными проблемами, которые можно исправить на лету. Когда я выполняю их немедленно, а затем фиксирую готовую функцию / исправление, фиксация включает в себя несколько вещей. Например "add feature X and code clean up"
или "fix bug X and improved logging"
. Было бы лучше разделить это на два коммита. Если два изменения произошли в одном и том же файле, я не могу просто добавить один файл, зафиксировать, добавить другой, а затем зафиксировать снова. Итак, я вижу следующие три варианта:
Умышленно игнорируйте несвязанные вещи, работая над чем-то.
Скопируйте файл с двумя изменениями, отмените его, включите одно изменение, подтвердите, включите другое изменение, подтвердите снова.
Не меняйте мелкие несвязанные вещи, но добавляйте их в список задач и делайте это позже.
Мне не очень нравятся все три варианта из-за следующих причин:
Качество кода может пострадать, если не исправить небольшие проблемы. И мне плохо, если я сознательно упускаю шанс что-то улучшить без особых усилий.
Это увеличивает ручную работу и подвержено ошибкам.
Это хорошо для не очень крошечных задач, но добавление крошечного элемента в список задач и его повторное посещение часто занимает гораздо больше времени, чем просто немедленное исправление.
Как вы справляетесь с такими ситуациями?
git add -p
много использую, что позволяет в интерактивном режиме выбирать части файлов, которые я хочу зафиксировать. Если очистить достаточно отдельно, это легко сделать. Если разделение является более сложным, я фиксирую состояние во временной ветви, а затем вручную добавляю изменения в мою фактическую ветку, пока во временной ветви не будет различий. Это требует гораздо больше работы, но позволяет мне проверить, что каждый коммит работает сам по себе.