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

Недавно начал ознакомление с git и github. Могу ли я переименовать commit, уже пропушеный на гитхабе? Знаю, что для этого используют git commit —amend -m «Some info». Только вот куда это вписывать? Долго рылся в интернете и не смог найти внятного объяснения. Использую расширение для VS, также есть десктопная версия гитхаба.
Отслеживать
3,737 1 1 золотой знак 20 20 серебряных знаков 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 add . Оставшуюся часть изменений можно дослать следующим коммитом.
Есть еще один способ. Если изменения еще не были отправлены во внешнюю систему, можно добавить изменения в текущий коммит. Для этого во время коммита добавляется флаг —amend :
echo 'experiment with amend' >> INFO.md echo 'experiment with amend' >> README.md git add INFO.md # Забыли сделать подготовку README.md к коммиту git commit -m 'add content to INFO.md and README.md' [main 256de25] add content to INFO.md and README.md 1 file changed, 1 insertion(+) git status On branch main Your branch is ahead of 'origin/main' by 1 commit. (use "git push" to publish your local commits) Changes not staged for commit: (use "git add . " to update what will be committed) (use "git restore . " to discard changes in working directory) modified: README.md # Увидели, что забыли добавить файл # Добавляем git add README.md git commit --amend # После этой команды откроется редактор, ожидающий ввода описания коммита # Здесь можно поменять сообщение или выйти из редактора, оставив старое [main d96151a] add content to INFO.md and README.md Date: Sat Sep 26 16:02:07 2020 -0400 2 files changed, 2 insertions(+) git status On branch main Your branch is ahead of 'origin/main' by 1 commit. (use "git push" to publish your local commits) nothing to commit, working tree clean
В реальности —amend не добавляет изменения в существующий коммит. Этот флаг приводит к откату коммита через git reset и выполнению нового коммита с новыми данными. Поэтому мы и видим ровно один коммит, хотя команда git commit выполнялась два раза (первый раз — когда сделали ошибочный коммит).
Чтобы не открывался редактор для ввода описания коммита к команде git commit —amend можно добавить опцию —no-edit . В этом случае описание коммита не изменится:
Самостоятельная работа
- Выполните все шаги из урока
- Залейте изменения на GitHub
Дополнительные материалы
![]()
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Как переименовать коммит 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, что создает проблему, если у других людей есть копии старого коммита, который вы переписали. Любой, у кого есть копия старого коммита, должен будет синхронизировать свою работу с вашим недавно переписанным коммитом, что иногда может быть сложно, поэтому убедитесь, что вы координируете свои действия с другими при попытке переписать общую историю коммитов, или просто избегайте редактирования коммитов.
Похожие темы:
- Git — как переименовать ветку?
- git — как применить патч?
- git — Создание патча из незакомиченных изменений
- Git — you may want to set your merge.renamelimit variable to at least 1608 and retry the command.
- Как удалить папки .@__thumb в Qnap?
- Как отключить генерацию .@__thumb папки в Qnap?