Как изменить комментарий к коммиту в Git
Чтобы изменить комментарий (сообщение) к последнему коммиту в вашем локальном репозитории используется команда:
git commit --amend
Данная команда предназначена для изменения комментария у последнего коммита только в вашем локальном репозитории. После ее выполнения, откроется текстовый редактор, в котором вы можете изменить сообщение коммита, а затем сохранить изменения.
Фактически при выполнении данной команды происходит создание нового коммита, который заменяет предыдущий. Это означает, что идентификатор коммита изменяется.
Изменение комментария у произвольного коммита
Чтобы изменить комментарий у произвольного коммита или у нескольких последних коммитов используется интерактивный ребейз.
Для этого используется команда:
rebase -i HEAD~n
Вместо n необходимо указать число, которое соответствует номеру коммита, комментарий которого вы хотите изменить, а если быть более точным, то это количество последних коммитов, комментарии у которых вы сможете изменить. Таким образом вы измените сообщения у соответствующих коммитов.
Например, чтобы изменить комментарии у трех последних коммитов используется команда:
git rebase -i HEAD~3
В результате выполнения данной команды откроется текстовый редактор примерно со следующим содержимым:
pick 64e2b94 Fixed data lost. pick eb538db Added ability to create new files. pick c427a24 Fixed removing incorrect lines. # Rebase b06e2f1..c427a24 onto b06e2f1 (3 commands) # # 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 # d, drop = remove commit # # 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 и ID коммита. Для тех коммитов, у которых вы хотите изменить сообщение, необходимо изменить слово pick на reword (или просто на r ). Например:
pick 64e2b94 Fixed data lost. r eb538db Added ability to create new files. r c427a24 Fixed removing incorrect lines.
Сохраните изменения и закройте редактор. После этого автоматически откроется редактор с первым коммитом (напротив которого вы только что изменили pick на r). Измените сообщение коммита, сохраните изменения и закройте редактор. Затем снова автоматически откроется редактор со следующим коммитом, измените сообщение коммита и снова закройте редактор.
Смотрите также:
- Как изменить файлы в старом коммите (не последнем)
- Как добавить все файлы в коммит, кроме одного
- Как создать ветку из предыдущего коммита
- Команда Git stash. Как прятать изменения в Git
- Как показать файлы, которые будут добавлены в текущий коммит
- Как отменить git add
- Как клонировать репозиторий
- Как посмотреть ветки
- Как переключиться на ветку
- Как удалить ветку
Переписывание истории
В данном обучающем материале описаны различные способы перезаписи и изменения истории в Git. В Git используются несколько способов регистрации изменений. Мы обсудим плюсы и минусы различных способов и покажем примеры работы с ними. В данном обучающем материале описаны некоторые типовые причины перезаписи состояний кода и разъясняется, как избегать ошибок при таких операциях.
Основная задача Git — гарантировать, что вы не потеряете внесенные изменений. Но эта система также предназначена для предоставления вам полного контроля над процессом разработки. В числе прочего вы сами определяете то, как выглядит история вашего проекта. Такая свобода создает и вероятность потери коммитов. Git предоставляет команды для перезаписи истории, но предупреждает, что использование таких команд может привести к потере данных.
В Git существует несколько механизмов хранения истории и сохранения изменений. Вот эти механизмы: commit —amend , git rebase и git reflog . Это мощные инструменты для настройки рабочего процесса. По окончании этого обучающего материала вы будете знать команды, которые позволят реструктурировать коммиты Git, и сможете избегать проблем, с которыми приходится сталкиваться при перезаписи истории.
Изменение сообщения о фиксации
Если сообщение о фиксации содержит нечеткую, неправильную или конфиденциальную информацию, вы можете изменить ее локально и отправить новую фиксацию с новым сообщением в GitHub. Вы также можете изменить сообщение о фиксации, чтобы добавить недостающие сведения.
Rewriting the most recent commit message
You can change the most recent commit message using the git commit —amend command.
In Git, the text of the commit message is part of the commit. Changing the commit message will change the commit ID—i.e., the SHA1 checksum that names the commit. Effectively, you are creating a new commit that replaces the old one.
Commit has not been pushed online
If the commit only exists in your local repository and has not been pushed to GitHub.com, you can amend the commit message with the git commit —amend command.
- On the command line, navigate to the repository that contains the commit you want to amend.
- Type git commit —amend and press Enter.
- In your text editor, edit the commit message, and save the commit.
- You can add a co-author by adding a trailer to the commit. For more information, see «Creating a commit with multiple authors.»
- You can create commits on behalf of your organization by adding a trailer to the commit. For more information, see «Creating a commit on behalf of an organization»
The new commit and message will appear on GitHub.com the next time you push.
You can change the default text editor for Git by changing the core.editor setting. For more information, see «Basic Client Configuration» in the Git manual.
Amending older or multiple commit messages
If you have already pushed the commit to GitHub.com, you will have to force push a commit with an amended message.
We strongly discourage force pushing, since this changes the history of your repository. If you force push, people who have already cloned your repository will have to manually fix their local history. For more information, see «Recovering from upstream rebase» in the Git manual.
Changing the message of the most recently pushed commit
- Follow the steps above to amend the commit message.
- Use the push —force-with-lease command to force push over the old commit.
git push --force-with-lease origin EXAMPLE-BRANCH
Changing the message of older or multiple commit messages
If you need to amend the message for multiple commits or an older commit, you can use interactive rebase, then force push to change the commit history.
- On the command line, navigate to the repository that contains the commit you want to amend.
- Use the git rebase -i HEAD~n command to display a list of the last n commits in your default text editor.
# Displays a list of the last 3 commits on the current branch $ git rebase -i HEAD~3
The list will look similar to the following:
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 e499d89 Delete CNAME reword 0c39034 Better README reword f7fde4a Change the commit message but push the same commit.
git push --force origin EXAMPLE-BRANCH
For more information on interactive rebase, see «Interactive mode» in the Git manual.
As before, amending the commit message will result in a new commit with a new ID. However, in this case, every commit that follows the amended commit will also get a new ID because each commit also contains the id of its parent.
If you have included sensitive information in a commit message, force pushing a commit with an amended commit may not remove the original commit from GitHub. The old commit will not be a part of a subsequent clone; however, it may still be cached on GitHub and accessible via the commit ID. You must contact us through the GitHub Support portal with the old commit ID to have it purged from the remote repository.
Further reading
Как изменить комментарий к коммиту git
Как исправить описание только последнего коммита
Если коммит только что сделан, и он не отправлен в origin-репозитарий командой git push , то изменить описание коммита можно такой командой:
git commit —amend -m «Новое описание»
Или можно дать команду:
git commit —amend
При выполнении этой команды будет открыт текстовый редактор по-умолчанию, в котором можно будет изменить сообщение коммита. После выхода из редактора, описание коммита будет изменено. При этом будет изменена SHA-1 сумма коммита.
Кстати, исправить можно не только описание, но и файлы и их состояние в коммите . Для этого нужно просто изменить или добавить или удалить файлы в рабочей директории, зафиксировать эти изменения в индексе (командами git add или git rm и проч.), после чего можно дать команду:
git commit —amend
в результате которой GIT возьмёт текущий индекс и сделает его снимком состояния нового коммита. Опять же, при этом будет изменена SHA-1 сумма коммита.
Как исправить описание любого коммита в истории
Описанные ниже действия возможны, если коммиты еще не отправлены на удаленный репозитарий, или если программист является единственным пользователем удаленного репозитария. Описанные ниже действия являются переписыванием истории. Поэтому, если есть другие программисты, то они будут вынуждены вытянуть себе заново всю копию репозитария, чтобы у них была такая же история, что и у автора правок.
Начиная с git 1.6.6 можно использовать механизм GIT, называющийся reword . Он используется в рамках команды rebase .
Для начала находим ID коммита с неправильным комментарием. Для этого в директории с нужным git-репозиторием набираем
git log —pretty=format:»%h — %ar : %s»
На выходе получаем список коммитов с хеш-идентификаторами. Например, такой
39ba64e — 7 hours ago : redirect to order status after booking
c4d25d6 — 8 hours ago : order status
Предполагается, что надо изменить коммит c4d25d6 . В дальнейших командах, контрольная сумма коммита обозначает глубину, на которую будет изменяться история.
Чтобы исправить неправильный комментарий у коммита c4d25d6, вводим следующую команду (обратите внимание на символ ^ после ID, это значит, что начинать rebase надо от его родителя. То есть, в команде rebase указывается родительский коммит того коммита, который надо отредактировать)
git rebase —interactive c4d25d6^
git откроет редактор по умолчанию, в котором вы увидите что-то типа:
pick c4d25d6 order status
pick 39ba64e redirect to order status after booking
Это сценарий действий, которые будут выполнены для изменения истории.
Меняем слово pick на слово reword, то есть нам нужно лишь изменить комментарий.
reword c4d25d6 order status
pick 39ba64e redirect to order status after booking
GIT предложит сохранить текстовый файл, что и нужно сделать. Фактически, в интерактивном режиме, это список команд для него. Он снова откроет текстовый редактор и предложит изменить комментарий для нужного коммита. После сохранения файлика git повторит весь комит, поменяет его ID и короткий хеш. Все.
Кстати, помимо reword есть еще и команда edit . После сохранения файла сценария, сценарий будет выполняться до команды edit , после чего GIT завершит работу и вернется в консоль. Будут примерно такие сообщения:
$ git rebase —interactive c4d25d6^
Stopped at c4d25d6. updated the gemspec to hopefully work better
You can amend the commit now, with
git commit —amend
Once you’re satisfied with your changes, run
git rebase —continue
В этот момент рабочая директория будет находиться в состоянии коммита c4d25d6 . Можно изменить это состояние (изменить или добавить или удалить файлы), и дать команду:
git commit —amend
Откроется редактор, в котором можно будет изменить описание коммита. После закрытия редактора, отредактированный коммит будет изменен в истории. И можно дать следующую команду:
git rebase —continue
Эта команда будет дальше искать коммиты, которые нужно изменить, и будет снова останавливаться чтобы позволить внести изменения, до самого последнем коммите.
Чтобы запушить изменения, сделанные таким способом, нужно выполнить команду:
После нее история на origin-сервере будет перезаписана. И если с репозитарием работают другие программисты, они должны будут принять всю измененную историю. Как это сделать — надо искать отдельно. Радикальный способ — это сделать git clone в отдельной директории и продолжить работу в ней. Можно пинять и отдельные изменения, но это тема для отдельной статьи.
- Бесплатные сервиса размещения репозитариев Git
- Git workflow — Теория
- Git workflow — Краткое введение по основным инструкциям
- Git Wizardry
- Про Git на пальцах (для переходящих с SVN)
- Git на двоих
- Ежедневный Git
- Удачная модель ветвления для Git
- Синхронизация через GIT
- Git stash — работа с «карманом» в Git
- Как посмотреть настройки репозитария Git и как их изменить
- GIT: Инструкция-шпаргалка для начинающих
- Как перенести локальный GIT-репозитарий на сервер вместе со всей историей
- git reset — возврат к определенному коммиту, откат изменений, «жесткий» или «мягкий»
- git revert — отмена изменений, произведенных в прошлом отдельным коммитом
- Git — работа с ветками
- Git: Путь Github. Цикл разработки — Простое объяснение
- Машина времени в GIT
- Git Rebase: руководство по использованию
- Git: просмотр лога (истории) в консоли в виде дерева
- Git: понимание команды git merge
- Git: Опции слияния для команд merge и pull — определение стратегии слияния
- Git: как переключиться на нужный коммит
- Git: как смержить изменения из experimental в master
- Git: как посмотреть изменения, внесенные определенным коммитом
- Git: как посмотреть историю изменения одного файла
- Git: как вернуть один файл в состояние, которое было в определенном коммите
- git log — особенности данной команды при навигации по истории через git checkout
- Git: Как исправить HEAD detached from
- Git: что делать в состоянии detached head
- Работа в команде с использованием Git на примере проекта в среде Blender 3D
- Git: Как внести изменения в последний коммит
- Как в Git создать новую ветку в условиях, когда что-то уже было изменено после последнего коммита
- Как в Git залить новую локальную ветку в удаленный репозитарий
- Git: Как подключить новую ветку с удаленного сервера
- Git: Как узнать текущую ветку
- Git: В чем разница между Fetch и Pull?
- GIT: Как исправить ошибочный комментарий к коммиту или файлы в коммите
- Как настроить git на использование proxy-сервера
- Использование Git через HTTP-proxy
- Настройка работы Git через Proxy-сервер
- Git через proxy
- Использование git за прокси с аутентификацией
- Как в Git смержить изменения до конкретного коммита?
- Самый удобный визуальный клиент Git под основные платформы — SmartGit
- Основы системы управления версиями Git для новичков на примере SmartGit
- Как сделать подключение к репозитарию Git через Socks Proxy в условиях отсутствия DNS
- Как сделать подключение к репозитарию Git через проксирующее SSH соединение
- Как работать с незавершенными изменениями в коде? Как их коммитить в Git?
- Как в Git посмотреть незакоммиченные изменения в текстах исходников?
- Как поместить на GitHub уже существующий репозитарий
- Что происходит при откате изменений через git reset —soft
- Не бойся хардресета! Он твой друг и помощник. (Как пользоваться git reset)
- Как пометить определенный коммит тегом версии
- Как в Git удалить файлы из индекса, не удаляя их в рабочей директории
- Как настроить GIT, чтобы при конфликте слияния он прописывал в файл не только различия, но и «базу» этих различий
- Git: Разрешение конфликтов объединений
- Git: Извлечение старой версии файла
- Git stash: временный отказ от проделанной работы
- Git: проверка состояния репозитария, поддержание репозитария в рабочем состоянии
- Как в Git отменить локальные изменения и получить новое состояние из удаленного репозитария
- Как искать изменения в нужных файлах с помощью интерфейса gitk?
- Как выбрать одну из версий бинарного файла при возникновнии конфликта слияния?
- Как в Git посмотреть старый коммит, а потом вернуться обатно к самому последнему коммиту
- Получение хеша последнего коммита и его даты в Git (для версионирования)
- Памятка по неочевидным деталям использования Git
- Как синхронизировать форк на Github с основным репозитарием через веб-интерфейс
- Как пользоваться GitHUb: форки, ветки, запросы на добавление кода
- Как отменить (сбросить) еще не закоммиченные изменения в Git
- Первоначальная настройка имени пользователя и Email в Git-проекте
- Можно ли принимать изменения через git pull если не закоммичены изменения рабочей директории
- Как посмотреть какие команды генерирует git gui
- Как удалить файл в Git-репозитарии с изменением истории