Изменяем историю коммитов в GIT

Рассмотрим две наиболее частые операции — изменение названия коммита и слияние нескольких коммитов в один.

Допустим, вы выполнили команду

И увидели следующую историю ваших коммитов в ветке:

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

А коммиты f30f70962a и f256b8a634 — это этапы одного процесса исправлений в коде, и их желательно просто свести в один.

Git предлагает выполнить обе операции в рамках одного процесса — rebase. Чтобы запустить этот процесс, надо определить точку его начала — а именно коммит, который не будет затронут вашими операциями.

В нашем случае — это ba29ebc296. Это первый коммит, идущий перед парочкой, которую мы хотим объединить.

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

Здесь нужно выбрать операции, который будет совершатся над коммитами. Внизу, в виде подсказки, они перечислены. В нашем примере нужны две — «reword» или «r» — для переименования, а также «squash» или «s» — для слияния соседних коммитов.

Поменяйте pick на нужную команду для каждого коммита. Squash работает как сведение коммита в тот, что идет выше по списку. Для нашего случая:

Pick — означает, что коммит будет взят без изменений.

На этом этапе не нужно менять тексты комментариев, только требуется выбрать тип операции, которую вы хотите произвести.

Когда вы сохраните изменения в тексте и выйдете из редактора, git будет поэтапно запрашивать у вас информацию по каждому из запланированных изменений. Снова будет запускаться текстовый редактор и вам надо будет вводить/изменять название коммита.

Например, изменение названия:

Измените название и сохраните файл, выйдите из редактора. И так для всех операций, которые меняют историю.

Что делаем после

Если вы изменяли историю коммитов, которые уже отправлены в origin, то ваша ветка окажется в состоянии:

Если вас устраивает то, что получилось. А также, если вашей веткой пользуетесь только вы. То можете смело push изменения, для этого нужно приложить некоторые усилия :)

Ветка в origin перепишется новой историей коммитов.

Если пошло что то не так, то это происходит пока у вас локально. Вы можете сбросить все изменения, чтобы вернуться к состоянию ветки синхронному origin:

Если в результате rebase вы оказались в состоянии detached, но вас устраивает то, что вы видите в истории коммитов, то вы можете подцепить ветку к текущему положению.

Мало букафф? Читайте есчо !

Установка Wordpress через composer

Апрель 3, 2023 г.

WP так то и сам хорошо управляется с модулями и темами. Вы можете установить модули/темы через админку. Единственный не удобный момент - это первоначальное ...

Читать

Как отключить отслеживание прав доступа к файлам в git

Декабрь 4, 2018 г.

GIT по умолчанию  следит за правами на запуск файлов. Чаще всего, отслеживание прав не требуется, но файлы то и дело попадают в список измененных, и далее - в коммиты. Давайте посмотрим как игнорировать смену прав доступа у файлам. К счастью, отключить ...

Читать

Организуем автодеплой изменений из репозитория для проекта на Drupal

Август 23, 2018 г.

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

Читать

Подключение к GitHub по SSH: пошаговая инструкция

Сентябрь 3, 2025 г.

Работа с репозиториями через SSH удобнее и безопаснее, чем по HTTPS — вам не нужно вводить пароль при каждом пуше, а авторизация выполняется с помощью криптографических ключей. Разберём процесс полностью: от создания ключа до проверки подключения. ...

Читать
 

Комментарии к «Изменяем историю коммитов в GIT»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: