Наиболее важной причиной частых, небольших и значимых коммитов является помощь в понимании истории кода. В частности, очень трудно понять, как изменился код, если трудно генерировать понятные различия.
Вариант 1 запутывает историю изменений, которые вы сделали, но в противном случае это не вызовет никаких проблем.
Вариант 2 запутывает историю внесенных вами изменений, возможно, несколько меньше, чем вариант 1, но он может вызвать другие проблемы для вас или других, если они предполагают или иным образом приходят к выводу, что коммиты различны, например, могут быть объединены в другие ветви независимо. Если нет веской практической причины, почему это предпочтительнее, чем вариант 1, это менее идеальный, чем он.
Вариант 3 является наилучшим, при прочих равных условиях, но если, как вы уже описывали в другом месте, для этого потребуется «чрезмерное» количество времени или возникнут другие значительные расходы, вам придется сопоставить эти затраты с ожидаемыми выгодами от создание чистых коммитов.
На основании предоставленной вами информации я бы выбрал вариант 1. Может быть, вам следует настроить напоминания, предлагающие вам внести изменения?
Прототипирование и переписывание
Еще одно соображение, которое следует иметь в виду, особенно в свете вашей заметки о том, что вы являетесь единственным программистом, и мое подозрение, что вы работаете над относительно новой кодовой базой, заключается в том, что, вероятно, полезно развивать различные привычки в отношении внесения изменений, когда вы Вы создаете прототип нового кода вместо поддержки или расширения существующего кода. Вероятно, не существует очень резкого разделения между ними, но я думаю, что это все еще полезное различие.
При создании прототипа нового кода выполняйте коммит всякий раз, когда хотите сохранить изменения, почти наверняка в ветке, но, возможно, в отдельном проекте. Или, может быть, даже просто работать вне системы контроля версий. Вместо этого вы можете сосредоточиться на сборе доказательств о целесообразности различных гипотез или конструкций, которые вы рассматриваете. Я часто пишу небольшие прототипы, используя различные инструменты, например LINQPad вместо Visual Studio для кода C #.
Когда вы проверили конкретную гипотезу или проект, переписайте его в своем основном проекте, в идеале в ветке, и сделайте небольшие, значимые коммиты, которые лучше всего помогут пониманию других (включая вас в будущем) природы изменений. ты делаешь.