#git #github #git_commit
Недавно начал ознакомление с git и github. Могу ли я переименовать commit, уже пропушеный на гитхабе? Знаю, что для этого используют git commit --amend -m "Some info". Только вот куда это вписывать? Долго рылся в интернете и не смог найти внятного объяснения. Использую расширение для VS, также есть десктопная версия гитхаба.
Ответы
Ответ 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---С # недоступен
Комментариев нет:
Отправить комментарий