Изменение последнего сообщения о фиксации
Последнее сообщение о фиксации можно изменить с помощью команды git commit --amend
.
В GIT текст сообщения о фиксации является частью фиксации. Изменение сообщения фиксации изменит ИД фиксации , т. е. контрольную сумму SHA1, которая называет фиксацию. Фактически создается новая фиксация вместо старой.
Фиксация не отправлена на сайт
Если фиксация существует только в локальном репозитории и не была отправлена в GitHub.com, можно изменить сообщение фиксации git commit --amend
с помощью команды.
- В командной строке перейдите к репозиторию, содержащему фиксацию, которую нужно изменить.
- Введите
git commit --amend
и нажмите клавишу ВВОД. - В текстовом редакторе измените сообщение о фиксации и сохраните фиксацию.
-
Вы можете добавить соавтора, добавив к фиксации заключительную часть. Дополнительные сведения см. в разделе Создание фиксации с несколькими авторами.
-
Вы можете создавать фиксации от имени организации, добавляя к фиксации заключительную часть. Дополнительные сведения см. в разделе Создание фиксации от имени организации.
-
Новая фиксация и сообщение будут отображаться на GitHub.com при следующем отправке.
Вы можете изменить текстовый редактор по умолчанию для GIT с помощью параметра core.editor
. Дополнительные сведения см. в разделе Базовая настройка клиента в руководстве по GIT.
Изменение более старых или нескольких сообщений о фиксациях
Если вы уже перенаправили фиксацию в GitHub.com, вам придется принудительная отправка фиксацию с измененным сообщением.
Мы настоятельно не рекомендуем выполнять принудительную отправку, так как это изменяет журнал репозитория. При принудительной отправке пользователям, которые уже клонировали репозиторий, придется вручную исправить свой локальный журнал. Дополнительные сведения см. в разделе Восстановление после вышестоящего перемещения изменения из одной ветви в другую в руководстве по GIT.
Изменение сообщения для последней отправленной фиксации
-
Выполните описанные выше действия, чтобы изменить сообщение о фиксации.
-
Используйте команду
push --force-with-lease
, чтобы принудительно отправить фиксацию вместо старой.git push --force-with-lease origin EXAMPLE-BRANCH
Изменение сообщения для старой фиксации или нескольких фиксаций
Если необходимо изменить сообщение для нескольких фиксаций или более старой фиксации, можно использовать интерактивное перемещение изменения из одной ветви в другую, а затем выполнить принудительную отправку, чтобы изменить журнал фиксаций.
-
В командной строке перейдите к репозиторию, содержащему фиксацию, которую нужно изменить.
-
Используйте команду
git rebase -i HEAD~n
, чтобы отобразить списокn
последних фиксаций в текстовом редакторе по умолчанию.# Displays a list of the last 3 commits on the current branch $ git rebase -i HEAD~3
Список будет выглядеть примерно так:
pick e499d89 Delete CNAME pick 0c39034 Better README pick f7fde4a Change the commit message but push the same commit. # Rebase 9fdb3bd..f7fde4a onto 9fdb3bd # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out
-
Замените
pick
наreword
перед каждым сообщением о фиксации, которое нужно изменить.pick e499d89 Delete CNAME reword 0c39034 Better README reword f7fde4a Change the commit message but push the same commit.
-
Сохраните и закройте файл со списком фиксаций.
-
В каждом полученном файле фиксации введите новое сообщение о фиксации, сохраните файл и закройте его.
-
Когда вы будете готовы отправить изменения в GitHub, используйте команду push --force, чтобы принудительно отправить старую фиксацию.
git push --force origin EXAMPLE-BRANCH
Дополнительные сведения об интерактивном перемещении изменения из одной ветви в другую см. в разделе Интерактивный режим в руководстве по GIT.
Как и ранее, изменение сообщения о фиксации приведет к созданию новой фиксации с новым идентификатором. Однако в этом случае каждая фиксация, которая следует за измененной фиксацией, также получит новый идентификатор, так как каждая фиксация также содержит идентификатор родительского элемента.
Если в сообщение о фиксации включены конфиденциальные сведения, при принудительной отправке измененной фиксации исходная фиксация может остаться на GitHub Enterprise Cloud. Старая фиксация не будет включаться в последующие клоны; однако она по-прежнему может быть кэширована на GitHub Enterprise Cloud и доступна по идентификатору фиксации. Чтобы удалить старую фиксацию из удаленного репозитория, необходимо обратиться в и сообщить ее идентификатор.