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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как изменить origin в GIT

Декабрь 11, 2020 г.

Можно зайти в настройки .git/config и поменять url источника прямо там, но предпочтительно делать это через командную строку. Origin меняется редко, давайте посмотрим как. Изначально вы задаёте связь с репо следующей командой: [crayon-6a59ebaa7cebd283262683/] ...

Читать

GIT может хранить пароли

Сентябрь 30, 2017 г.

Операции с удаленным частным репозиторием требуют ввода пароля. Git может сохранять введенные пароли, чтобы не вводить их при каждой операции. Как это сделать? Во-первых, git может запомнить введенный пароль временно. Это позволит выполнить ряд ...

Читать

Перезапись ветки данными из origin

Ноябрь 8, 2018 г.

Когда что то не просто пошло не так, а зашло слишком далеко, как восстановить состояние из удаленного репозитория (origin)? Я прибегаю к этому методу, если эксперименты в очередной раз зашли в тупик, а [crayon-6a59ebaa7d3c5198501028/] требует ...

Читать

Используем PAT для работы с github

Август 19, 2021 г.

GitGub отключили парольную авторизацию, и предлагают использовать SSH с PAT. О том как это настроить и использовать читайте далее в статье. Сложно избавиться о раздражения, когда требуется что то опять настраивать для выполнения ежедневных рутинных ...

Читать
 

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

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



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