Перейти к содержимому

Как переименовать коммит в git

  • автор:

Как в git изменить комментарий к коммиту?

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

Однако порой в спешке под конец рабочего дня разработчик может закоммититься с подписью вроде такой «WIP» или «TMP». В статье рассмотрим, как в git переименовать коммит. При этом возможны два основных случая — коммит является последним или коммит не является последним.

Переименование последнего коммита

На следующий день разработчик приходит на работу, просматривает изменения в ветке и вспоминает, что нужно изменить комментарий к коммиту. Для этого достаточно использовать команду git commit —amend -m «Новое название коммита» .

Изменение комментария к не последнему коммиту

Допустим разработчик забыл с утра откорректировать название коммита, и в течение дня сделал ещё несколько коммитов. Тогда встаёт вопрос, как обновить комментарий, например для четвёртого коммита вглубь истории.

Итак, чтобы в git исправить комментарий такого коммита потребуется выполнить rebase в интерактивном режиме.

1. Сначала нужно посмотреть, на сколько коммитов назад находится тот коммит, которые нужно отредактировать. Для этого можно использоваться либо git log —oneline , либо консольный GUI для Git, например, tig.

Видим, что изменить комментарий нужно к коммиту «tmp», находящийся позади на четыре коммита относительно HEAD.

2. Теперь запускаем rebase в интерактивной режиме:

git rebase -i HEAD~5

3. В появившемся редакторе следует в строках коммитов изменить команду pick на reword .

Затем сохраняем файл и выходим.

4. Автоматически начнется ребейз и откроется файл редактирования коммита. Здесь необходимо ввести новую подпись к коммиту.

5. Остаётся сохранить и выйти. Теперь название коммита изменено.

Важно. Оба описанных способа приводят к изменению коммитов, а значит коммиты на сервере и в локальной ветке будут теперь отличаться. Поэтому запушить ветку так просто не получится — нужно использовать флаг —force .

Однако, если работа в ветке ведётся несколькими разработчиками одновременно, тогда такой подход неприемлем.

Метки: Метки: git
Понравилась статья? — Ставь лайк!
2 Комментарии на “Как в git изменить комментарий к коммиту?”

Однако, если работа в ветке ведётся несколькими разработчиками одновременно, тогда такой подход неприемлем. —
А какой будет приемен, в таком случае?

как переименовать коммит в github?

введите сюда описание изображения

Недавно начал ознакомление с git и github. Могу ли я переименовать commit, уже пропушеный на гитхабе? Знаю, что для этого используют git commit —amend -m «Some info». Только вот куда это вписывать? Долго рылся в интернете и не смог найти внятного объяснения. Использую расширение для VS, также есть десктопная версия гитхаба.

Отслеживать
3,728 1 1 золотой знак 19 19 серебряных знаков 47 47 бронзовых знаков
задан 7 ноя 2017 в 6:46
Artur Kuchynski Artur Kuchynski
83 1 1 золотой знак 1 1 серебряный знак 5 5 бронзовых знаков
7 ноя 2017 в 7:00

если в проекте кроме вас никого нет, то сделайте локально git commit —amend -m «Some info» и затем git push —force

7 ноя 2017 в 7:03
если работаете не один, то посоветуйтесь с другими контрибьюторами — может это не так критично
7 ноя 2017 в 7:04
чем вы пользуетесь для управления гитом? клиентом гитхаба, командной строкой, что-то еще?
7 ноя 2017 в 7:06

пока что пользуюсь расширением для VS. так вопрос стоял в том, куда вписывать git commit —amend -m «Some info» и git push —force ? Вопрос был в этом)

7 ноя 2017 в 7:10

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Для выполнения команд git используется так называемая «консоль» — интерпретатор команд на специальном языке. На Linux/Unix/OS X консоль работает с языками семейства Sh (sh, bash, zsh. ), на Windows есть cmd.exe (cmd) и PowerShell (powershell), но вместе с Git ставится Git Bash – интерпретатор bash с базовым набором программ.

Не всегда коммит можно переименовывать

Пока коммит не попал на удаленный репозиторий, с ним можно делать что угодно.

Ваш коммит уже попал на удаленный репозиторий, в ветку master . Если кто-то ещё использует этот репозиторий, переименовывать коммиты нельзя, потому что при переименовании фактически создается новый коммит.

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

Как переименовать коммит и отправить новое состояние на GitHub

Предположим, что есть вот такая история коммитов. На локальном и удаленном сервере одна и та же история:

локальный: A---B (master) удаленный: A---B (origin/master) 

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

git commit --amend -m 'Новое сообщение' 

Стало после —amend :

локальный: A---B2 (master) # совершенно другой коммит, хоть и с тем же содержимым) \ B # не удален, но больше не принадлежит ветке master. # можно восстановить через git reflog удаленный: A---B (origin/master) 

После этого придётся явным образом переписать ветку master на удаленном репозитории (на GitHub). Поскольку история коммитов разошлась, GitHub не примет изменения просто так, нужно добавить ключ —force :

git push --force origin
локальный: A---B2 (master) \ B удаленный: A---B (origin/master) 

Стало после push —force :

удаленный: A---B2 (origin/master) \ B # вообще недоступен, потому что у вас нет доступа к файловой системе гитхаба # уберется сборщиком мусора на сервере 

Осторожно: в общем случае команда push —force опасна, так как переписывает состояние ветки на удаленном репозитории и может привести к потерям.

Например, если кто-то добавит свой коммит в ветку master , а потом вы переименуете свою ветку и сделаете push —force , то чужой коммит будет потерян.

Было:

локальный: A---B2 (master) \ B удаленный: A---B---С (origin/master) 

Стало: чужой коммит C потерян, автор идёт к вам с недобрыми намерениями

удаленный: A---B2 (origin/master) \ B---С # недоступен 

Как переименовать коммит git в репозитории

Если же вам нужно переименновать несколько коммитов, то вам нужно ввести git rebase -i , и в интерактивном режиме отредактировать сообщения нужных коммитов.

# 9ca69dd (HEAD -> main) add super awesome file.txt # c1a5665 (new-branch) fix bug # 86954b1 change readme # daaa7f9 add 1.txt 2.txt # 9f2880b readme # здесь указываем rebase до последнего коммита, который хотим отредактировать git rebase -i 9f2880b 

git — как изменить закоммиченное сообщение?

Если была допущена ошибка в сообщение и команда git commit уже выполнена, не отчаивайтесь — все можно поправить. Рассмотрим два варианта:

Как изменить сообщение последнего коммита?

Данный пункт подразумевает, что вы еще не выполняли команду git push и все изменения хранятся в Вашем локальном репозитории. Выполните команду:

git commit --amend

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

Если комментарий маленький — более удобно изменить комментарий последнего коммита в командной строке, с помощью команды:

git commit --amend -m "новое соошение"Code language: JavaScript (javascript)

Предупреждение: Перед коммитом убедитесь, что у вас нет внесенных изменений в рабочую копию, иначе они тоже будут закоммичены. (Unstaged изменения не коммитятся)

Как изменить сообщения коммита, который вы уже отправили на сервер?

Если вы уже отправили коммит на сервер с помощью команды git push , то — после внесения изменений в коммит локально (как описано выше) — вам также потребуется выполнить команду push из ключем —force :

git push название ветка на сервере> --forceCode language: HTML, XML (xml)
git push название ветка на сервере> -fCode language: HTML, XML (xml)

Предупреждение: при использовании ключа —force , если в удаленной ветке есть коммиты, которых нет в вашей локальной ветке, вы потеряете эти коммиты.

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

Запись опубликована 22.09.2021 автором androschuk.a в рубрике Блог, Песочница с метками Git, Песочница.

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://alkogolizm.vyvod-iz-zapoya-v-stacionare-samara11.ru/