Есть ли способ сократить промежуточные коммиты git?

285
mike rodent

Надеюсь, что это правильный форум для этого вопроса ... скажите мне, если нет.

Я являюсь основным пользователем git, но я разрабатывал это приложение в течение последних нескольких месяцев, используя принцип «часто совершайте». Так что теперь я только что побежал git rev-list --all --countи обнаружил, что у меня 425 коммитов.

Это может быть сумасшествием ... или это может быть совершенно нормально. Я понятия не имею.

Дело в том, что хранилище становится немного громоздким, и то, что я хотел бы сделать в идеальном мире, - это просто пройти через коммиты, исключив 2 из каждых 3: я хотел бы, чтобы сообщения о коммитах были быть удаленным, чтобы каким-то образом быть добавленным к сообщениям тех, которые должны остаться ...

Существует «ручной» способ сделать это: я пробираюсь по всему репо, проверяю каждый 3-й коммит, тщательно отмечаю текст из коммитов, которые я не сохраняю, и систематически добавляю их в «каждый третий» сообщение.

В то же время, очевидно, я создаю новый репо, в котором используются только те «каждые 3 коммиты». Я еще не пробовал это, отчасти потому, что это кажется мне занудой, которая займет очень много времени: есть ли что-нибудь в git или какой-нибудь инструмент, изобретенный кем-либо, который может помочь в решении этой задачи?

0
Что делает ~ 400-коммитный репозиторий "немного громоздким"? grawity 7 лет назад 0
Благодарю. По крайней мере, это не заставило вас смеяться: первое препятствие преодолено. Ну, я иногда делаю резервную копию этого репо на Google Drive: на данный момент это 11 МБ, не слишком волосатое. Но основная мысль в моей голове такова: очистив эти отдельные шаги один за другим некоторое время назад, мне не нужно сохранять все 425 крошечных шагов, совершенных несколько месяцев назад ... на самом деле это скорее вопрос принципа чем (пока) практический вопрос. mike rodent 7 лет назад 0

1 ответ на вопрос

1
grawity

Зачем

История Git работает лучше всего, когда она на самом деле рассказывает историю процесса разработки. Когда вам в конечном итоге нужно копаться в истории (например, для поиска, когда была введена ошибка, когда она была исправлена ​​и т. Д.), Это не помогает увидеть коммиты под названием «Добавить сегодняшние изменения» ; они говорят вам, как код был изменен, но не почему.

Переписывание истории совершить это обычно делается (слить фиксации, поменять их вокруг, и так далее) - но если вы просто произвольно удалить 2 из каждых 3 фиксаций, он, вероятно, останется столь же бесполезным, как и раньше. Вместо этого переписайте историю, чтобы убрать такие вещи, как «упс, исправьте опечатку» или добавьте больше деталей для фиксации сообщений.

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

425 коммитов это нормально для нескольких месяцев проекта. Это также относительно мало по сравнению со многими реальными репозиториями Git (которые измеряют коммиты тысячами). Если вас беспокоит использование дискового пространства, а Git еще не запустил периодическую программу git gc, попробуйте запустить ее вручную и посмотрите, поможет ли это.

Резервное копирование по сети git pushбудет гораздо более эффективным, чем загрузка целых репозиториев вручную, поскольку он точно знает, что нужно загружать, а что уже есть.

Возвращаясь к делу

В Git есть много инструментов для переписывания истории - наиболее распространенным является то git rebase --interactive, что может делать именно тот тип правок, который вы хотите.

; on a feature branch, to rewrite everything that's not yet in master git rebase -i master  ; on master, to go through the *entire history* git rebase -i --root 

Запуск его в интерактивном режиме открывает «список задач» в текстовом редакторе, с одной строкой на фиксацию и «действием» перед ним.

  • Перемещение строк будет изменять порядок коммитов. (Однако изменение текста не приведет к обновлению сообщений коммита - это всего лишь предварительный просмотр. Используйте rewordдля редактирования реального сообщения.)

  • Изменение действия с на pickна squashобъединит фиксацию с вышеупомянутым - в результате получается один коммит, который также содержит оба сообщения.

  • fixupДействие аналогично, но только держит 1 - ое сообщение.

Это основа, потому что множество уроков уже написано гораздо более подробно. Например, в Git Book есть глава о переписывании истории .

Спасибо ... это очень информативно для моего низкого уровня, и я внимательно изучу, что вы говорите. Интересно, вы можете «подтолкнуть» к репо, фактически проживающему на Google Диске, или вам нужно что-то настроить на GitHub, например? На самом деле у меня есть еще непрочитанная электронная книга на GitHub, поскольку для кого-то вроде меня (не ИТ-специалиста) довольно сложно понять, как это работает. mike rodent 7 лет назад 0
Google Drive - не по умолчанию, нет. (Хотя есть плагин для отправки на Dropbox.) В общем, вы можете либо перейти на личный сервер, где у вас есть доступ по SSH, либо зарегистрироваться где-нибудь на Git-хостинге. (GitHub популярен для публичных проектов, тогда как BitBucket и GitLab - две альтернативы, которые также предлагают частные репозитории бесплатно.) grawity 7 лет назад 0
Еще раз спасибо. Я посмотрю BitBucket и / или GitLab как можно скорее! mike rodent 7 лет назад 0
Обратите внимание, что оба веб-сайта предоставляют бесплатные учетные записи хостинга и предлагают устанавливаемые «корпоративные» продукты, поэтому не смущайтесь рекламой на первой странице; просто перейдите по ссылке «зарегистрироваться». Кроме того, даже если вы не используете GitHub, в его справочной области есть много учебников по `git push` и SSH, которые в равной степени применимы ко всем сайтам. grawity 7 лет назад 0

Похожие вопросы