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

Как изменить коммит git после пуша

  • автор:

как переименовать коммит в 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 . В этом случае описание коммита не изменится:

Самостоятельная работа
  1. Выполните все шаги из урока
  2. Залейте изменения на 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?

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

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