Как удалить коммит с гитхаба
Перейти к содержимому

Как удалить коммит с гитхаба

  • автор:

Как удалить commit на Github?

1. Как удалить самый первый тестовый комит на гитхаб
пробывал git reset —hard HEAD, но он один, и поэтому не могу нигде найти как его удалить
И как это сделать так что бы на гитхабе его тоже не было.
p.s только начал пользоваться гитом поэтому сори за возможно глупые вопросы

  • Вопрос задан более двух лет назад
  • 7067 просмотров

Комментировать
Решения вопроса 2

sergey-kuznetsov

Сергей Кузнецов @sergey-kuznetsov Куратор тега Git
Автоматизатор

Раз первый коммит единственный и он тебе не нужен, то можно просто удалить репозиторий на GitHub и создать заново. Но можно и не пересоздавать:

# удалить все файлы в рабочей копии git rm -r * # создать на месте первого коммита пустой коммит git commit --allow-empty --amend --message "Initial commit" # отправить текущую ветку на GitHub git push --force

Получишь чистый репозиторий с начальным пустым коммитом.
Сам пустой коммит можно использовать как основу для построения своего дерева коммитов.
Либо через ключ —amend замени его на что-то более осмысленное.

А ещё лучше не заниматься ерундой, исправить код и исправить коммит ключиком —amend

Ответ написан более двух лет назад
Нравится 1 14 комментариев
ebaysher @ebaysher Автор вопроса

$ git rm *
fatal: not removing ‘Chess’ recursively without -r
Сделал:
git rm -r Chess
git commit —allow-empty —amend —all —message «Initial commit»
git push —force,
Содержимое коммита не изменилось (кроме названия),
а весь код в файле Chess удалился
Как откатить теперь назад и вернуть код?

sergey-kuznetsov

Сергей Кузнецов @sergey-kuznetsov Куратор тега Git

Тогда так
git rm -r .
Удалить желательно всё

Потом закоммитить факт удаления и посмотреть содержимое коммита перед тем как пушить.

Что значит код в файле удалился? Должен был удалиться не код, а сам файл. Точнее все файлы по маске .

ebaysher @ebaysher Автор вопроса

Сергей Кузнецов, У меня почему то после команды git rm -r, студия загрузилась и удалились неколько файлов с классами. Теперь пытаюсь разобраться как назад откатить.

sergey-kuznetsov

Сергей Кузнецов @sergey-kuznetsov Куратор тега Git

Если речь про https://github.com/ebaysher/chess
то там вообще нет такого файла или папки. Удали всё руками просто в проводнике.
И потом коммит.

Ты точно уверен что надо удалить коммит? Вариант с исправлением кода на нужный не подходит?

15. Удаление коммитов из ветки

revert из предыдущего раздела является мощной командой, которая позволяет отменить любые коммиты в репозиторий. Однако, и оригинальный и «отмененный» коммиты видны в истории ветки (при использовании команды git log ).

Часто мы делаем коммит, и сразу понимаем, что это была ошибка. Было бы неплохо иметь команду «возврата», которая позволила бы нам сделать вид, что неправильного коммита никогда и не было. Команда «возврата» даже предотвратила бы появление нежелательного коммита в истории git log .

01 Команда reset

Мы уже видели команду reset и использовали ее для согласования области подготовки с выбранным коммитом (в предыдущем уроке мы использовали коммит HEAD ).

Если выполнить команду reset с указанием ссылки на коммит (т.е. метки HEAD , имени ветки или тега, хеша коммита), то команда.

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

02 Проверьте нашу историю

Давайте сделаем быструю проверку нашей истории коммитов.

Выполните
git log 
Результат
$ git log 86364a1 2023-11-28 | Revert "Oops, we didn't want this commit" (HEAD -> main) [Alexander Shvets] 6a44bec 2023-11-28 | Oops, we didn't want this commit [Alexander Shvets] b7614c1 2023-11-28 | Added HTML header (tag: v1) [Alexander Shvets] 46afaff 2023-11-28 | Added standard HTML page tags (tag: v1-beta) [Alexander Shvets] 78433de 2023-11-28 | Added h1 tag [Alexander Shvets] 5836970 2023-11-28 | Initial commit [Alexander Shvets] 

Мы видим, что два последних коммита в этой ветке — «Oops» и «Revert Oops». Давайте удалим их с помощью сброса.

03 Для начала отметьте эту ветку

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

Выполните
git tag oops 
Результат
$ git log 86364a1 2023-11-28 | Revert "Oops, we didn't want this commit" (HEAD -> main, tag: oops) [Alexander Shvets] 6a44bec 2023-11-28 | Oops, we didn't want this commit [Alexander Shvets] b7614c1 2023-11-28 | Added HTML header (tag: v1) [Alexander Shvets] 46afaff 2023-11-28 | Added standard HTML page tags (tag: v1-beta) [Alexander Shvets] 78433de 2023-11-28 | Added h1 tag [Alexander Shvets] 5836970 2023-11-28 | Initial commit [Alexander Shvets] 

04 Сброс к коммиту, предшествующему oops

Глядя на историю лога (см. выше), мы видим, что коммит с тегом v1 является коммитом, предшествующим ошибочному коммиту. Давайте сбросим ветку до этой точки. Поскольку ветка имеет тег, мы можем использовать имя тега в команде сброса reset (если она не имеет тега, мы можем использовать хеш коммита).

Выполните
git reset --hard v1 git log 
Результат
$ git reset --hard v1 HEAD is now at b7614c1 Added HTML header $ git log b7614c1 2023-11-28 | Added HTML header (HEAD -> main, tag: v1) [Alexander Shvets] 46afaff 2023-11-28 | Added standard HTML page tags (tag: v1-beta) [Alexander Shvets] 78433de 2023-11-28 | Added h1 tag [Alexander Shvets] 5836970 2023-11-28 | Initial commit [Alexander Shvets] 

Наша ветка main теперь указывает на коммит v1 , а коммитов «Revert Oops» и «Oops» в ветке уже нет. Параметр —hard указывает, что рабочая директория должна быть приведена к тому состоянию, которое соответствует HEAD -коммиту ветки.

05 Ничего никогда не теряется

Что же случается с ошибочными коммитами? Оказывается, что коммиты все еще находятся в репозитории. На самом деле, мы все еще можем на них ссылаться. Помните, в начале этого урока мы создали для отмененного коммита тег oops ? Давайте посмотрим на все коммиты.

Выполните
git log --all 
Результат
$ git log --all b7614c1 2023-11-28 | Added HTML header (HEAD -> main, tag: v1) [Alexander Shvets] 86364a1 2023-11-28 | Revert "Oops, we didn't want this commit" (tag: oops) [Alexander Shvets] 46afaff 2023-11-28 | Added standard HTML page tags (tag: v1-beta) [Alexander Shvets] 6a44bec 2023-11-28 | Oops, we didn't want this commit [Alexander Shvets] 78433de 2023-11-28 | Added h1 tag [Alexander Shvets] 5836970 2023-11-28 | Initial commit [Alexander Shvets] 

Мы видим, что ошибочные коммиты не исчезли. Они все еще находятся в репозитории. Просто они отсутствуют в ветке main . Если бы мы не отметили их тегами, они по-прежнему находились бы в репозитории, но не было бы никакой возможности ссылаться на них, кроме как при помощи хешей этих коммитов. Коммиты, на которые нет ссылок, остаются в репозитории до тех пор, пока не будет запущен сборщик мусора.

06 Опасность сброса

Сброс в локальных ветках, как правило, безопасен. Последствия любой «аварии» как правило, можно восстановить простым сбросом с помощью нужного коммита.

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

Как отменить последний коммит git

Тут нужно понять, что именно необходимо сделать. Потому что под отменой часто понимают удаление последнего коммита. Удалить последний коммит можно очень просто с помощью команды git reset . Причём можно как сохранить изменения в рабочей директории, так и полностью удалить все изменения сделанные в последнем коммите.

# удаляем только коммит git reset --hard HEAD~ # удаляем коммит и изменения 

А вот отменить изменения сделанные в последнем коммите можно с помощью команды git revert . Она делает еще один коммит, но с противоположными изменениями.

# нужно передать ей хеш коммита, который мы отменяем 

28 декабря 2022

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

vorozhba / Как удалить commit в Github.txt

Save vorozhba/b458077f396191a6105cf91e1739a313 to your computer and use it in GitHub Desktop.

Как удалить commit в Github

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

1. Получаем хэш-код коммита, к которому хотим вернуться.
2. Заходим в папку репозитория и пишем в консоль:
$ git reset —hard a3775a5485af0af20375cedf46112db5f813322a
$ git push —force

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

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