Skip to main content

Изменение сообщения о фиксации

Если сообщение о фиксации содержит нечеткую, неправильную или конфиденциальную информацию, вы можете изменить ее локально и отправить новую фиксацию с новым сообщением в GitHub. Вы также можете изменить сообщение о фиксации, чтобы добавить недостающие сведения.

Изменение последнего сообщения о фиксации

Последнее сообщение о фиксации можно изменить с помощью команды git commit --amend.

В GIT текст сообщения о фиксации является частью фиксации. Изменение сообщения фиксации изменит ИД фиксации , т. е. контрольную сумму SHA1, которая называет фиксацию. Фактически создается новая фиксация вместо старой.

Фиксация не отправлена на сайт

Если фиксация существует только в локальном репозитории и не была отправлена в GitHub.com, можно изменить сообщение фиксации git commit --amend с помощью команды.

  1. В командной строке перейдите к репозиторию, содержащему фиксацию, которую нужно изменить.
  2. Введите git commit --amend и нажмите клавишу ВВОД.
  3. В текстовом редакторе измените сообщение о фиксации и сохраните фиксацию.

Новая фиксация и сообщение будут отображаться на GitHub.com при следующем отправке.

Вы можете изменить текстовый редактор по умолчанию для GIT с помощью параметра core.editor. Дополнительные сведения см. в разделе Базовая настройка клиента в руководстве по GIT.

Изменение более старых или нескольких сообщений о фиксациях

Если вы уже перенаправили фиксацию в GitHub.com, вам придется принудительная отправка фиксацию с измененным сообщением.

Мы настоятельно не рекомендуем выполнять принудительную отправку, так как это изменяет журнал репозитория. При принудительной отправке пользователям, которые уже клонировали репозиторий, придется вручную исправить свой локальный журнал. Дополнительные сведения см. в разделе Восстановление после вышестоящего перемещения изменения из одной ветви в другую в руководстве по GIT.

Изменение сообщения для последней отправленной фиксации

  1. Выполните описанные выше действия, чтобы изменить сообщение о фиксации.

  2. Используйте команду push --force-with-lease, чтобы принудительно отправить фиксацию вместо старой.

    git push --force-with-lease origin EXAMPLE-BRANCH
    

Изменение сообщения для старой фиксации или нескольких фиксаций

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

  1. В командной строке перейдите к репозиторию, содержащему фиксацию, которую нужно изменить.

  2. Используйте команду 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
    
  3. Замените pick на reword перед каждым сообщением о фиксации, которое нужно изменить.

    pick e499d89 Delete CNAME
    reword 0c39034 Better README
    reword f7fde4a Change the commit message but push the same commit.
    
  4. Сохраните и закройте файл со списком фиксаций.

  5. В каждом полученном файле фиксации введите новое сообщение о фиксации, сохраните файл и закройте его.

  6. Когда вы будете готовы отправить изменения в GitHub, используйте команду push --force, чтобы принудительно отправить старую фиксацию.

    git push --force origin EXAMPLE-BRANCH
    

Дополнительные сведения об интерактивном перемещении изменения из одной ветви в другую см. в разделе Интерактивный режим в руководстве по GIT.

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

Если в сообщение о фиксации включены конфиденциальные сведения, при принудительной отправке измененной фиксации исходная фиксация может остаться на GitHub. Старая фиксация не будет включаться в последующие клоны; однако она по-прежнему может быть кэширована на GitHub и доступна по идентификатору фиксации. Чтобы удалить старую фиксацию из удаленного репозитория, необходимо обратиться в us через портал поддержки GitHub и сообщить ее идентификатор.

Дополнительные материалы