Git правка сообщений последних коммитов

Иногда бывает так, что вы работаете, делаете коммиты, а в какой-то момент оказывается, что в комментариях вы указывали не тот номер задачи или неправильно писали какое-нибудь слово. Git в таких случаях позволяет вам поправить эти сообщения. Разумеется, правки истории желательно производить до того, как вы сделали git push, чтобы не расстраивать других разработчиков, которые работают с этой веткой.

Допустим, что у нас есть репозиторий с четырьмя изменениями:

И мы вдруг понимаем, что три последних коммита относились не к TASK-10, а к TASK-20, и мы хотим изменить сообщения этих коммитов так, чтобы там фигурировала именно двадцатая таска. Для этого мы применим команду rebase:

Цифра три после HEAD~ указывает количество коммитов от головы ветки, которые мы изменить. Перед нами откроется текстовый редактор (в моем случае это был GNU nano) со следующим содержимым:

Нам нужно отредактировать этот текст так, чтобы rebase  останавливался на коммитах, которые мы хотим изменить, для этого нам нужно заменить слово pick на edit перед этими коммитами:

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

Сохраняем изменения в файле. Способ сохранения зависит от редактора, но в случае GNU nano последовательность такая Ctrl+O, Enter, Ctrl+X.

Мы увидим нечто вроде такого:

Это произошла остановка на коммите с сообщением “TASK-10 second line”,  для того чтобы изменить комментарий, вводим следующие команды:

В текстовом редакторе правим комментарий и сохраняем файл.

Затем вводим команду:

Этим мы перещемаемся к следующему коммиту:

Снова с вводим:

И так далее. Таким образом правим все три коммита. После третьего git rebase --continue  мы  можем снова посмотреть историю и убедиться, что сообщения к коммитам поменялись:

Вот. Теперь мы научились править коммиты в git. Мы можем запушить их в удалённый репозиторий с помощью

или

в зависимости от того успели ли вы до этого запушить свои старые коммиты.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *