Git как удалить коммит из удаленного репозитория
Перейти к содержимому

Git как удалить коммит из удаленного репозитория

  • автор:

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

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

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

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

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

28 декабря 2022

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

Как удалить коммит в удаленном репозитории?

Сделал коммит. Не заметил как в него попала пара сотен МБт дерьмища. Потом запушил и тут я обнаружил свой косяк. Подскажите, как в удаленном и локальном репозитории удалить последний коммит с сохранением изменений в рабочей дирректории?

git reset —hard HEAD~1 неподходит, т.к. возвращает меня к комиту 3х месячной давности! Нужно удалить коммит, но чтобы все изменения в рабочей директории сохранились! Спасибо!

NkDev
09.06.18 12:05:29 MSK

Чем не устраивает —soft?

oldstable ★
( 09.06.18 12:08:21 MSK )

1. удаляешь коммит локально (например, через git rebase -i)

2. git push -f origin branchname

waker ★★★★★
( 09.06.18 12:08:24 MSK )

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

Deleted
( 09.06.18 12:10:54 MSK )

reset без —hard. —soft/—mixed на выбор. Далее вычищаешь всё ненужно, commit, push -f

Deleted
( 09.06.18 12:11:04 MSK )

git revert HEAD git push 

. и нет проблем синхронизации.

KennyMinigun ★★★★★
( 09.06.18 12:31:29 MSK )
Последнее исправление: KennyMinigun 09.06.18 12:32:16 MSK (всего исправлений: 1)

Ответ на: комментарий от KennyMinigun 09.06.18 12:31:29 MSK

Смотри-ка, сколько в трэде любителей push —force!

Deleted
( 09.06.18 12:33:56 MSK )
Ответ на: комментарий от KennyMinigun 09.06.18 12:31:29 MSK

. и есть огромные проблемы с размером репозитория!

в него попала пара сотен МБт дерьмища

EXL ★★★★★
( 09.06.18 12:43:13 MSK )

EXL ★★★★★
( 09.06.18 12:46:15 MSK )
Ответ на: комментарий от oldstable 09.06.18 12:08:21 MSK

или git commit —amend

i-rinat ★★★★★
( 09.06.18 12:47:28 MSK )

Через git rm удалить всё ненужное.
Потом git commit —amend, чтобы ранее добавленное и свежеудалённое аннигилировались.
Потом push —force, чтобы перезаписать последний коммит.
Profit!

akk ★★★★★
( 09.06.18 12:53:35 MSK )
Ответ на: комментарий от Deleted 09.06.18 12:33:56 MSK

А как ещё ты предлагаешь удалять часть истории?

Miguel ★★★★★
( 09.06.18 12:54:48 MSK )
Ответ на: комментарий от Miguel 09.06.18 12:54:48 MSK

В сабжевом случае хорошо подходит это. В том и цимес же, что историю на remote удолять не надо )

Deleted
( 09.06.18 13:13:37 MSK )
Ответ на: комментарий от akk 09.06.18 12:53:35 MSK

+1, сам так делаю, когда накосячу 🙂

htower_ ★★
( 09.06.18 13:21:51 MSK )

Не заметил как в него попала пара сотен МБт дерьмища

Кстати, ТС, а как это случилось? Убогий gitignore?

Deleted
( 09.06.18 13:23:59 MSK )
Ответ на: комментарий от Deleted 09.06.18 13:13:37 MSK

Каким образом это подходит, если при этом подходе до скончания времен при любом git clone будет тянутся

EXL ★★★★★
( 09.06.18 13:33:15 MSK )
Последнее исправление: EXL 09.06.18 13:33:28 MSK (всего исправлений: 1)

Ответ на: комментарий от Deleted 09.06.18 13:13:37 MSK

Во-первых, вопрос именно о том, как её удалить.

Во-вторых, почему не надо-то? Мастер не стоит, но пока это моя бранча — что хочу, то и ворочу.

Miguel ★★★★★
( 09.06.18 13:33:31 MSK )
Ответ на: комментарий от Miguel 09.06.18 13:33:31 MSK

пока это моя бранча — что хочу, то и ворочу.

Даже если твой бранч уже смержили в мастер?

tailgunner ★★★★★
( 09.06.18 13:34:24 MSK )
Ответ на: комментарий от EXL 09.06.18 13:33:15 MSK

Не так уж и много + clone не каждый день/неделя/месяц.

А так да, на это внимания не обратил

Deleted
( 09.06.18 13:36:36 MSK )
Ответ на: комментарий от Miguel 09.06.18 13:33:31 MSK

Вот здесь не понял. С чего ты взял, что это не общая ветка?

Deleted
( 09.06.18 13:38:12 MSK )
Ответ на: комментарий от Deleted 09.06.18 13:36:36 MSK

Лучше перезапись последнего коммита с push —force в remote, чем мусор на несколько сотен мегабайт в репозитории, который поди

И за убожество вида revet ‘my shit commit’ в истории тоже надо линчевать.

EXL ★★★★★
( 09.06.18 13:42:22 MSK )
Ответ на: комментарий от EXL 09.06.18 13:42:22 MSK

И за убожество вида revet ‘my shit commit’ в истории тоже надо линчевать

Линчевать много за что можно, но иногда выбора нет. К тому же, смотря на сколько

В случае тонких ошибок полезно это в репе оставить, в назидание, так сказать. К сабжу это не относится, но там по-другому можно повернуть: какого хера gitignore не заюзали? А скорее всего — заюзали, но там шаблонов подходящих не было(на все случаи не напасёшься). Было бы неплохо иметь, скажем gitaccept, указывая какие файлы _отслеживать_, а не какие игнорировать. Через gitignore тоже можно, но там костыльно — сомневаюсь, что пригодно для продакшена. Сколько здесь кандидатур на линчевание?)

Deleted
( 09.06.18 13:51:34 MSK )
Ответ на: комментарий от Deleted 09.06.18 13:51:34 MSK

Из зол вида «сотни МБ хлама в БД до скончания веков» и «перезапись последнего запушенного коммита» — первая куда как больше.

Я очень сильно сомневаюсь, что у ТС огромный и оверпопулярный репозиторий, который форкают каждый день и каждый час отправляют в него PR’ы. А потому этот —force скорее всего никто кроме TC и не заметит.

Как удалить коммит в удаленном репозитории?

Сделал коммит. Не заметил как в него попала пара сотен МБт дерьмища. Потом запушил и тут я обнаружил свой косяк. Подскажите, как в удаленном репозитории удалить последний коммит?

На своем локальном ПК я понял как удалить: git reset —hard HEAD~1. Но мне нужно теперь откатиться и в удаленном репозитории! Если я просто после этой команды сделаю push на удаленном тоже удалится этот коммит?

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

Комментировать

Решения вопроса 1

Как удалить коммиты с удаленного компьютера в Git

Как удалить коммиты с удаленного компьютера в Git

Манипуляции с историей очень распространены среди разработчиков, регулярно работающих с Git. Действительно, разработчикам часто приходится удалять коммиты из истории Git. К счастью, Git предоставляет множество команд, позволяющих сделать эту операцию возможной.

Приступаем к делу ��.

Шаг 0 — Подготовка

Прежде чем манипулировать историей Git, убедитесь, что в вашем рабочем каталоге нет никаких изменений, используя команду git status.

Шаг 1. Локальное удаление коммитов

Чтобы удалить коммиты с удаленного сервера, сначала вам нужно будет удалить их из вашей локальной истории.

1.1 Для последовательных коммитов сверху

Если коммиты, которые вы хотите удалить, находятся вверху истории коммитов, используйте команду git reset —hard с объектом HEAD и количеством коммитов, которые вы хотите удалить.

git reset —hard HEAD~1

Эта команда удалит последнюю фиксацию.

git reset —hard HEAD~3

Эта команда удалит последние три коммита.

Вы также можете удалить до определенного коммита, используя хэш коммита, например:

1.2 Для непоследовательных коммитов

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

  • [ ] Найдите хэш последнего коммита, содержащий все коммиты, которые вы хотите удалить, с помощью команды git reflog .
  • [ ] Запустите интерактивную перебазировку с помощью git rebase -i .
  • [ ] На экране редактирования найдите строки фиксации, которые вы хотите удалить, и удалите их.
  • [ ] Сохранить и выйти (может потребоваться разрешить конфликты)
  • [ ] Завершите интерактивную перебазировку с помощью git rebase —continue или начните заново, прервав перебазирование.

Шаг 2 — Удалить коммиты с удаленного сервера

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

git push origin HEAD —force

Поскольку ваша локальная история отличается от удаленной истории, вам нужно использовать опцию «force».

Последние мысли

Как видите, Git упрощает удаление коммитов с удаленного сервера.

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

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

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