Git commit style: все измененные файлы одновременно или по одному за раз? - PullRequest
11 голосов
/ 15 сентября 2011

Я сохраняю свою работу ночью с одним коммитом для многих файлов. Интересно, будет ли лучше зафиксировать каждый файл, но это, похоже, намного больше работы.

У меня нет проблем с тем, как обстоят дела сейчас, но я планирую разместить свой код на GitHub и хочу, чтобы его было легко понять.

Мне интересно, что делают остальные из вас, кто использует git. Кроме того, если бы вы могли как-то объяснить это для меня. Я новичок в Git и использую TortoiseGit и gitk в Windows.

Ответы [ 2 ]

18 голосов
/ 15 сентября 2011

Когда совершать, а что совершать - это искусство, а черно-белых правил не существует.Тем не менее, есть привычки, которые легче понять, чем другие.

В общем, я думаю, вам следует оптимизировать свои коммиты для понятности - если вы вернетесь и прочитаете diff для коммита, можете ли вы выяснитьчто вы достигли в изменениях?

Если вы хотите быть более конкретным, вот длинный список того, что я думаю, что нужно делать, а чего нельзя:

  • Не совершать послекаждое небольшое изменение - каждая строка изменялась, каждый файл менялся и т. д.
  • Не работайте целый день и сделайте один гигантский коммит в конце дня.
  • Делайте отдельнокоммиты для различных функций - например, разработка функции foo вместо исправления ошибки # 2.
  • Сделайте отдельный коммит для перемещения / переименования файлов, потому что Git легче отследить таким образом.
  • Подумайтеоб оптимизации для обратимости: если вам не нравится внесенное вами изменение, легко ли его отменить даже после того, как новые изменения были наложены сверху?
10 голосов
/ 15 сентября 2011

«Легко понять» означает также:

  • фиксирует не только «контрольную точку» (как это было бы при фиксации после каждой модификации файла), но и связное состояние кода
  • легко git bisect (то есть каждый коммит должен представлять изменение в задании , которое компилирует и добавляет эволюцию или новую функцию, а не «фиксацию контрольной точки», что приведет к слишком быстрому провалу git bisect

См. " понимание рабочего процесса Git " для получения дополнительной информации: вам нужно различать:

  • частных веток (которые вы никогда не нажимаете), где вы можете фиксировать в основном в любое время, и
  • публичных веток (которые вы будете нажимать на GitHub), которые должны быть очищены и иметь значимые коммиты.

Обратите внимание на слияние fast-forward, которое Git использует по умолчанию : не забудьте очистить историю веток, которые вы собираетесь слить,путь в публичные ветви.

...