Предположим, у вас есть такое дерево:
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
Сначала checkout
временная ветвь:
git checkout -b temp
В temp
ветви, reset --hard
для коммита, для которого вы хотите изменить его сообщение (например, этот коммит 946992
):
git reset --hard 946992
Используйте amend
, чтобы изменить сообщение:
git commit --amend -m "<new_message>"
После этого дерево будет выглядеть так:
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
\
b886a0 [temp]
Затем cherry-pick
для всех коммитов, которые стоят перед 946992
с master
до temp
, и используйте их, используйте amend
, если вы также хотите изменить их сообщения:
git cherry-pick 9143a9
git commit --amend -m "<new_message>
...
git cherry-pick 5a6057
git commit --amend -m "<new_message>
Дерево теперь выглядит так:
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
\
b886a0 - 41ab2c - 6c2a3s - 7c88c9 [temp]
Теперь принудительно нажмите временную ветку на удаленный:
git push --force origin temp:master
Последний шаг: удалить ветку master
на локальной, git fetch origin
, чтобы извлечь ветку master
с сервера, затем переключиться на ветку master
и удалить ветку temp
.
Теперь и ваши локальные и удаленные будут обновлять все сообщения.