Есть способы изменить сообщение из последующих коммитов:
git commit --amend # for the most recent commit
git rebase --interactive master~2 # but requires *parent*
Как вы можете изменить сообщение коммита самого первого коммита (у которого нет родителя)?
git filter-branch --msg-filter
Ответы:
Предполагая, что у вас чистое рабочее дерево, вы можете сделать следующее.
источник
git rebase --onto HEAD <sha1-of-root> master
.git rebase
.git rebase
применяет коммиты в <branch> (master
), которых нет в <upstream>;HEAD
не вmaster
, так что ваша версия пытается применить всеmaster
.git rebase --onto HEAD <sha1-of-root>
мастер, где<sha1-of-root>
используется то же самоеgit checkout <sha1-of-root>
. В противном случае у вас будет 2first commit
.HEAD
гарантирует, что все коммиты будут учтены, и что мы сможем использовать двухпараметрическую версию rebase, чтобы вернуться на master. Обратите внимание, что этот ответ предшествует существованию--root
опции перебазирования.Начиная с Git версии 1.7.12 , теперь вы можете использовать
Документация
источник
Чтобы расширить ответ ecdpalma , теперь вы можете использовать
--root
опцию, чтобы сказать,rebase
что вы хотите переписать root / first commit:Тогда корневой коммит появится в списке перебазирования TODO, и вы можете выбрать его для редактирования или перефразирования:
Это объяснение
--root
из документации по Git rebase (выделено мной):источник
Просто чтобы предоставить альтернативу более высоким рейтингам ответов:
Если вы создаете репо и заранее знаете, что в будущем вы будете перебазировать его «первый» реальный коммит, вы можете полностью избежать этой проблемы, сделав вначале явный пустой коммит:
и только тогда начинайте делать "настоящие" коммиты. Затем вы можете легко перебазировать поверх этого коммита стандартным способом, например
git rebase -i HEAD^
источник
.gitattributes
файл вместо пустого.Вы можете использовать
git filter-branch
:источник
-- --all
в этом случае опция действительно является ключом, чтобы можно было также обрабатывать корневой коммит.