Случайно нажал commit: изменить сообщение git commit

в моем локальном РЕПО у меня есть одна фиксация с неправильным сообщением фиксации.

Я уже опубликовал неправильное сообщение фиксации с git push.

теперь удаленное РЕПО (которое размещено на GitHub) также имеет неправильное сообщение фиксации.

Я уже пробовал git commit --amend, но обнаружил, что это не будет работать для меня в этой ситуации, потому что я сделал дополнительные коммиты с неверным.

Как бы вы исправить эту ситуацию?

4 ответов


простое решение (но, пожалуйста, прочитайте весь этот ответ, прежде чем делать это):

  1. git rebase -i <hash-of-commit-preceding-the-incorrect-one>
  2. в открывшемся редакторе измените pick to reword в строке неправильной фиксации.
  3. сохраните файл и закройте редактор.
  4. редактор откроется снова с неправильным сообщением фиксации. Исправить это.
  5. сохраните файл и закройте редактор.
  6. git push --force обновить На GitHub.

это будет означать, что вы будете публиковать измененную версию ранее опубликованной репозитория. Если кто-то вытащил или извлек из вашего РЕПО между тем, когда вы сделали ошибку с неправильным сообщением фиксации, и когда вы его исправили, то они будут испытывать некоторые трудности позже. Поэтому убедитесь, что вы можете принять это следствие, прежде чем попробовать это.


вместо того, чтобы пройти весь маршрут перебазирования для одной фиксации:

git reset --soft head~
git commit -m "The message you wanted to use"
git push -f

вы можете увидеть параметры в git-reset manpage.

для проекта, над которым работаете только вы, измененная история не должна быть проблемой.


Если вам нужно изменить старое сообщение фиксации по нескольким ветвям (т. е. фиксация с ошибочным сообщением присутствует в нескольких ветвях), вы можете использовать

git filter-branch -f --msg-filter 'sed "s/<old message>/<new message>/g"' -- --all

заменить коммита.

Git создаст временный каталог для перезаписи и дополнительного резервного копирования старых ссылок в refs / original/.

-f будет обеспечивать выполнение операции. Это необходимо, если временный каталог уже присутствует или если уже есть ссылки, хранящиеся в разделе refs / original. Если это не так, вы можете сбросить этот флаг.

-- отделяет параметры ветви фильтра от параметров ревизии

--all убедитесь, что все отделения и теги переопределяются.

из-за резервного копирования ваших старых ссылок вы можете легко вернуться в состояние перед выполнением команды.

скажите, вы хотите восстановите свой Мастер и получите к нему доступ в ветке old_master:

git checkout -b old_master refs/original/refs/heads/master

после того как вы удовлетворяетесь с вашей пользой изменений ГИТ пуш-Ф чтобы подтолкнуть изменения к публичному РЕПО.

обратите внимание, что вы должны сообщить об этом своим сотрудникам, так как все хэши коммитов, начиная с первого измененного, были изменены.


если вы не нажали код на удаленную ветку (GitHub / Bitbucket), вы можете изменить сообщение фиксации в командной строке, как показано ниже.

 git commit --amend -m "Your new message"

если вы работаете над определенной веткой, сделайте это.

git commit --amend -m "BRANCH-NAME: new message"

если вы уже нажали код с неправильным сообщением, то вам нужно быть осторожным при изменении сообщения. Я. e после изменения сообщения фиксации и повторной попытки его нажатия у вас возникают проблемы. Чтобы сделать его гладким, следуйте этим лестница. пожалуйста, читайте весь ответ, прежде чем делать это

git commit --amend -m "BRANCH-NAME : your new message"

git push -f origin BRANCH-NAME                # Not a best practice. Read below why?

важное замечание: при использовании force push напрямую вы можете столкнуться с проблемами кода, которые другие разработчики работают в той же ветви. Поэтому, чтобы избежать конфликтов, вам нужно вытащить код из своей ветви, прежде чем делать усилие нажима

 git commit --amend -m "BRANCH-NAME : your new message"
 git pull origin BRANCH-NAME
 git push -f origin BRANCH-NAME

Это лучшая практика при изменении сообщения фиксации, если оно уже было нажато.