Есть ли способ отредактировать сообщение о коммите после его отправки и отправки на GitHub? Я вижу, что есть «добавить заметку», а также встроенное комментирование, но нет фактического редактирования сообщения коммита. В расширениях git есть также «изменить коммит», но это не изменяет существующее сообщение.
3 ответа
git rebase -i <commit hash you want to change>^
Откроется редактор по умолчанию (обычно vi) со списком коммитов и действий для каждого из них. По умолчанию действие
pick
.Для любого коммита, который вы хотите изменить в сообщении, измените
pick
наreword
.Сохраните и выйдите (в vi
:wq
).Для каждого такого коммита вы получите редактор для редактирования сообщения коммита. Измените его, как считаете нужным, сохраните и выйдите.
Как только вы закончите редактирование всех сообщений коммита, вы вернетесь в командную строку и получите новое дерево с обновленными сообщениями.
Теперь вы можете загрузить их на github, используя
git push origin --force
.
Если вам просто нужно исправить ваш последний коммит, вы можете заменить шаги 1-4 на git commit --amend
.
В Intellij Idea вы можете сделать это так просто.
- Открытый контроль версий (история)
- Выберите вкладку журнала
- Выберите совершить, чтобы изменить комментарий
- нажмите F2 (Mac fn + F2) и обновите сообщение о коммите
Другой вариант - создать дополнительную "фиксацию ошибок" (и push), которая ссылается на объект фиксации, содержащий ошибку - новая фиксация ошибок также обеспечивает исправление. Ошибочная фиксация - это фиксация без существенных изменений кода, но с важным сообщением фиксации - например, добавьте один пробел в ваш файл readme и подтвердите это изменение с помощью важного сообщения фиксации или используйте опцию git --allow-empty
. Это, конечно, проще и безопаснее, чем перебазирование, оно не изменяет истинную историю и поддерживает чистоту дерева ветвей (использование amend
также является хорошим выбором, если вы исправляете самую последнюю фиксацию, но ошибочная фиксация может быть хорошим выбором для старшие коммиты). Этот тип вещей случается так редко, что достаточно просто документировать ошибку. В будущем, если вам потребуется выполнить поиск в журнале git по ключевому слову функции, оригинальная (ошибочная) фиксация может не появиться, поскольку в этой оригинальной фиксации использовалось неправильное ключевое слово (оригинальная опечатка) - однако ключевое слово появится в сообщении об ошибке, которое затем укажет вам на исходный коммит с опечаткой. Вот пример:
$ git log commit 0c28141c68adae276840f17ccd4766542c33cf1d Author: First Last Date: Wed Aug 8 15:55:52 2018 -0600 Errata commit: This commit has no substantive code change. THis commit is provided only to document a correction to a previous commit message. This pertains to commit object e083a7abd8deb5776cb304fa13731a4182a24be1 Original incorrect commit message: Changed background color to red Correction (*change highlighted*): Changed background color to *blue* commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 Author: First Last Date: Wed Aug 8 15:43:16 2018 -0600 Some interim commit message commit e083a7abd8deb5776cb304fa13731a4182a24be1 Author: First Last Date: Wed Aug 8 13:31:32 2018 -0600 Changed background color to red