Перейти к содержимому

Введение

Git имеет различные механизмы для перезаписи истории, которые включают команды git commit --amend, git rebase и git reflog. Чтение нашего руководства поможет вам лучше понять функции этих команд и их особенности.

Изменение последнего коммита с помощью git commit --amend

Вы часто можете забыть отформатировать коммит, добавить файлы в индекс или допустить ошибку в сообщении коммита. Здесь на помощь приходит git commit --amend. Выполнение этой команды поможет исправить подобные мелкие ошибки. В целом, эта команда используется для изменения последнего коммита. Выполните следующую команду, чтобы объединить добавленные в индекс изменения с предыдущим коммитом:

bash
git commit --amend

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

Команда git reflog

«reflogs» (reference logs, или журналы ссылок) используются для записи обновлений, вносимых в заголовки веток. С помощью команды git reflog вы можете вернуться ко всем коммитам, включая те, на которые не ссылается ни одна ветка. Выполните приведенную ниже команду, чтобы просмотреть журнал:

bash
git reflog

Команда git reflog имеет собственные подкоманды, которые включают git reflog show, git reflog expire и git reflog delete.

Git rebase

Команда git rebase используется для перемещения или объединения серии коммитов в совершенно новый базовый коммит. Главное преимущество этой команды — чистая история, что важно для эффективной работы в Git. Существует два режима работы git rebase: стандартный и интерактивный. В стандартном режиме вы можете использовать git rebase для применения коммитов из текущей рабочей ветки к указанному заголовку другой ветки. С помощью интерактивного режима вы можете поддерживать историю проекта чистой. Чтобы запустить интерактивный режим, добавьте опцию -i к git rebase:

bash
git rebase -i <base-branch>

Несколько сообщений

Каждый коммит Git содержит сообщение журнала, которое объясняет, что произошло в этом коммите. Во время интерактивного rebase вы можете использовать следующие команды для редактирования сообщений коммитов:

  • Используйте команду r (reword), чтобы приостановить воспроизведение rebase и переписать сообщение отдельного коммита.
  • Команда s (squash) приостановит все коммиты, помеченные как s, и вам будет предложено объединить отдельные сообщения коммитов в одно.
  • Команда f (fixup) аналогична squash. Разница заключается в том, что она не приостанавливает воспроизведение rebase для открытия редактора с целью объединения сообщений коммитов.

Объединение коммитов для чистой истории

Команда squash указывает коммиты, которые вы хотите объединить с предыдущими. Git открывает текстовый редактор и предлагает объединить конкретные сообщения коммитов. Следующая инфографика наглядно демонстрирует этот процесс.

intro

Коммиты, измененные с помощью команды git rebase, имеют другие идентификаторы, чем оригинальные. Если предыдущие коммиты были перезаписаны, коммиты, помеченные как pick, получат совершенно новый идентификатор.

Практика

Какие из следующих утверждений верны относительно механизмов перезаписи истории в Git?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.