Как в git изменить комментарий к коммиту?
Рабочий процесс в системе контроля версий git сводится к тому, что разработчик создает от ветки develop новую ветку для реализации конкретной задачи. Принято, что в ветке каждому коммиту соответствует более-менее логически законченная единица работы или же изменения, которые в будущем может потребоваться отменить.
Однако порой в спешке под конец рабочего дня разработчик может закоммититься с подписью вроде такой «WIP» или «TMP». В статье рассмотрим, как в git переименовать коммит. При этом возможны два основных случая — коммит является последним или коммит не является последним.
Переименование последнего коммита
На следующий день разработчик приходит на работу, просматривает изменения в ветке и вспоминает, что нужно изменить комментарий к коммиту. Для этого достаточно использовать команду git commit —amend -m «Новое название коммита» .
Изменение комментария к не последнему коммиту
Допустим разработчик забыл с утра откорректировать название коммита, и в течение дня сделал ещё несколько коммитов. Тогда встаёт вопрос, как обновить комментарий, например для четвёртого коммита вглубь истории.
Итак, чтобы в git исправить комментарий такого коммита потребуется выполнить rebase в интерактивном режиме.
1. Сначала нужно посмотреть, на сколько коммитов назад находится тот коммит, которые нужно отредактировать. Для этого можно использоваться либо git log —oneline , либо консольный GUI для Git, например, tig.
Видим, что изменить комментарий нужно к коммиту «tmp», находящийся позади на четыре коммита относительно HEAD.
2. Теперь запускаем rebase в интерактивной режиме:
git rebase -i HEAD~5
3. В появившемся редакторе следует в строках коммитов изменить команду pick на reword .

Затем сохраняем файл и выходим.

4. Автоматически начнется ребейз и откроется файл редактирования коммита. Здесь необходимо ввести новую подпись к коммиту.


5. Остаётся сохранить и выйти. Теперь название коммита изменено.
Важно. Оба описанных способа приводят к изменению коммитов, а значит коммиты на сервере и в локальной ветке будут теперь отличаться. Поэтому запушить ветку так просто не получится — нужно использовать флаг —force .
Однако, если работа в ветке ведётся несколькими разработчиками одновременно, тогда такой подход неприемлем.
Метки: Метки: git
Понравилась статья? — Ставь лайк!
2 Комментарии на “Как в git изменить комментарий к коммиту?”
Однако, если работа в ветке ведётся несколькими разработчиками одновременно, тогда такой подход неприемлем. —
А какой будет приемен, в таком случае?
как переименовать коммит в github?

Недавно начал ознакомление с git и github. Могу ли я переименовать commit, уже пропушеный на гитхабе? Знаю, что для этого используют git commit —amend -m «Some info». Только вот куда это вписывать? Долго рылся в интернете и не смог найти внятного объяснения. Использую расширение для VS, также есть десктопная версия гитхаба.
Отслеживать
3,728 1 1 золотой знак 19 19 серебряных знаков 47 47 бронзовых знаков
задан 7 ноя 2017 в 6:46
Artur Kuchynski Artur Kuchynski
83 1 1 золотой знак 1 1 серебряный знак 5 5 бронзовых знаков
7 ноя 2017 в 7:00
если в проекте кроме вас никого нет, то сделайте локально git commit —amend -m «Some info» и затем git push —force
7 ноя 2017 в 7:03
если работаете не один, то посоветуйтесь с другими контрибьюторами — может это не так критично
7 ноя 2017 в 7:04
чем вы пользуетесь для управления гитом? клиентом гитхаба, командной строкой, что-то еще?
7 ноя 2017 в 7:06
пока что пользуюсь расширением для VS. так вопрос стоял в том, куда вписывать git commit —amend -m «Some info» и git push —force ? Вопрос был в этом)
7 ноя 2017 в 7:10
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Для выполнения команд git используется так называемая «консоль» — интерпретатор команд на специальном языке. На Linux/Unix/OS X консоль работает с языками семейства Sh (sh, bash, zsh. ), на Windows есть cmd.exe (cmd) и PowerShell (powershell), но вместе с Git ставится Git Bash – интерпретатор bash с базовым набором программ.
Не всегда коммит можно переименовывать
Пока коммит не попал на удаленный репозиторий, с ним можно делать что угодно.
Ваш коммит уже попал на удаленный репозиторий, в ветку master . Если кто-то ещё использует этот репозиторий, переименовывать коммиты нельзя, потому что при переименовании фактически создается новый коммит.
В вашем случае похоже, что вы работаете над учебным заданием в собственном репозитории, поэтому вреда не будет.
Как переименовать коммит и отправить новое состояние на GitHub
Предположим, что есть вот такая история коммитов. На локальном и удаленном сервере одна и та же история:
локальный: A---B (master) удаленный: A---B (origin/master)
Для переименования коммита действительно нужно выполнить команду.
git commit --amend -m 'Новое сообщение'
Стало после —amend :
локальный: A---B2 (master) # совершенно другой коммит, хоть и с тем же содержимым) \ B # не удален, но больше не принадлежит ветке master. # можно восстановить через git reflog удаленный: A---B (origin/master)
После этого придётся явным образом переписать ветку master на удаленном репозитории (на GitHub). Поскольку история коммитов разошлась, GitHub не примет изменения просто так, нужно добавить ключ —force :
git push --force origin
локальный: A---B2 (master) \ B удаленный: A---B (origin/master)
Стало после push —force :
удаленный: A---B2 (origin/master) \ B # вообще недоступен, потому что у вас нет доступа к файловой системе гитхаба # уберется сборщиком мусора на сервере
Осторожно: в общем случае команда push —force опасна, так как переписывает состояние ветки на удаленном репозитории и может привести к потерям.
Например, если кто-то добавит свой коммит в ветку master , а потом вы переименуете свою ветку и сделаете push —force , то чужой коммит будет потерян.
Было:
локальный: A---B2 (master) \ B удаленный: A---B---С (origin/master)
Стало: чужой коммит C потерян, автор идёт к вам с недобрыми намерениями
удаленный: A---B2 (origin/master) \ B---С # недоступен
Как переименовать коммит git в репозитории
Если же вам нужно переименновать несколько коммитов, то вам нужно ввести git rebase -i , и в интерактивном режиме отредактировать сообщения нужных коммитов.
# 9ca69dd (HEAD -> main) add super awesome file.txt # c1a5665 (new-branch) fix bug # 86954b1 change readme # daaa7f9 add 1.txt 2.txt # 9f2880b readme # здесь указываем rebase до последнего коммита, который хотим отредактировать git rebase -i 9f2880b
git — как изменить закоммиченное сообщение?
Если была допущена ошибка в сообщение и команда git commit уже выполнена, не отчаивайтесь — все можно поправить. Рассмотрим два варианта:
Как изменить сообщение последнего коммита?
Данный пункт подразумевает, что вы еще не выполняли команду git push и все изменения хранятся в Вашем локальном репозитории. Выполните команду:
git commit --amend
после выполнения данной команды откроется редактор, установленный по умолчанию, который позволит вам изменить сообщение последнего коммита.
Если комментарий маленький — более удобно изменить комментарий последнего коммита в командной строке, с помощью команды:
git commit --amend -m "новое соошение"Code language: JavaScript (javascript)
Предупреждение: Перед коммитом убедитесь, что у вас нет внесенных изменений в рабочую копию, иначе они тоже будут закоммичены. (Unstaged изменения не коммитятся)
Как изменить сообщения коммита, который вы уже отправили на сервер?
Если вы уже отправили коммит на сервер с помощью команды git push , то — после внесения изменений в коммит локально (как описано выше) — вам также потребуется выполнить команду push из ключем —force :
git push название ветка на сервере> --forceCode language: HTML, XML (xml)
git push название ветка на сервере> -fCode language: HTML, XML (xml)
Предупреждение: при использовании ключа —force , если в удаленной ветке есть коммиты, которых нет в вашей локальной ветке, вы потеряете эти коммиты.
Будьте осторожны при внесении изменений в коммиты, особенно те, которые вы уже отправили на сервер. Внесение изменений в коммиты по существу переписывает их, чтобы они имели другие идентификаторы SHA, что создает проблему, если у других людей есть копии старого коммита, который вы переписали. Любой, у кого есть копия старого коммита, должен будет синхронизировать свою работу с вашим недавно переписанным коммитом, что иногда может быть сложно, поэтому убедитесь, что вы координируете свои действия с другими при попытке переписать общую историю коммитов, или просто избегайте редактирования коммитов.
Запись опубликована 22.09.2021 автором androschuk.a в рубрике Блог, Песочница с метками Git, Песочница.
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.