Есть ли способ отредактировать сообщение о коммите после его отправки и отправки на GitHub? Я вижу, что есть «добавить заметку», а также встроенное комментирование, но нет фактического редактирования сообщения коммита. В расширениях git есть также «изменить коммит», но это не изменяет существующее сообщение.
130
Ответы:
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
.источник
^
там - я действительно предложил перебазировать родительский элемент коммита, который вы хотите изменить.^^
чтобы завершить команду литералом,^
например:git rebase -i 2c747b32^^
В Intellij Idea вы можете сделать это так просто.
источник
git push origin --force
впоследствии, как предложено в ответе @ Mureinik.Предпосылка:
если ваш git-график выглядит так ...
(
df9c192
иb7ec061
являются хешами коммитов target-commit и parent-commit, отдельно)Решение:
Вы можете просто ввести следующие инструкции ...
Объяснение:
git reset --soft b7ec061
сохранит ваши изменения файлов и сбросит их в parent-commit (т.е. b7ec061)git commit -m "..."
локально создаст новый коммитgit push -f
подтолкнет ваш новый коммит к серверу и заменит старый (т.е. df9c192)источник
Другой вариант - создать дополнительную «фиксацию ошибок» (и push), которая ссылается на объект фиксации, содержащий ошибку - новая фиксация ошибок также обеспечивает исправление. Ошибочная фиксация - это фиксация без существенных изменений кода, но с важным сообщением о фиксации - например, добавьте один пробел в ваш файл readme и зафиксируйте это изменение с важным сообщением фиксации или используйте опцию git
--allow-empty
. Это, конечно, проще и безопаснее, чем перебазирование, оно не изменяет истинную историю и сохраняет дерево ветвей чистым (используяamend
также хороший выбор, если вы исправляете самый последний коммит, но ошибочный коммит может быть хорошим выбором для более старых коммитов). Этот тип вещей случается так редко, что достаточно просто документировать ошибку. В будущем, если вам потребуется выполнить поиск в журнале git по ключевому слову функции, оригинальная (ошибочная) фиксация может не появиться, поскольку в этой оригинальной фиксации использовалось неправильное ключевое слово (оригинальная опечатка) - однако ключевое слово появится в сообщении об ошибке, которое затем укажет вам исходный коммит с опечаткой. Вот пример:источник
Ответ @Mureinik хорош, но не понятен новичку.
Первый метод:
git commit --amend
:pick
, это уже страница редактирования, и вы можете напрямую отредактировать верхнее сообщение и сохранить и выйти , например:git push -u origin master --force
или<how you push normally> --force
. Ключ здесь--force
.Второй метод:
Вы можете увидеть коммит хеша
git log
или извлечь из репозитория URL, например, в моем случае это881129d771219cfa29e6f6c2205851a2994a8835
Тогда вы можете сделать
git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835
илиgit rebase -i HEAD^
(если последний)Вы бы увидели:
noop
вы, вероятно, печатаете неправильно, например, если вы делаете то,git rebase -i 881129d771219cfa29e6f6c2205851a2994a88
что пропущено^
в конце, вам лучше выйти из редактора без сохранения и выяснить причину:noop
проблем нет , просто измените словоpick
наreword
, остальное просто остается (вы не редактируете сообщение коммита в данный момент), например:git push -u origin master --force
или<how you push normally> --force
. Ключ здесь--force
.Для получения дополнительной информации, пожалуйста, прочитайте документацию .
источник