LINUX.ORG.RU

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

 


1

2

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

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



Последнее исправление: NkDev (всего исправлений: 1)

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

2. git push -f origin branchname

waker ★★★★★
()

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

Deleted
()

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

Deleted
()
Ответ на: комментарий от KennyMinigun

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

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

EXL ★★★★★
()

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

akk ★★★★★
()

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

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

Deleted
()
Ответ на: комментарий от Deleted

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

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

?

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от Deleted

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

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

Miguel ★★★★★
()
Ответ на: комментарий от Deleted

Не так уж и много

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

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

EXL ★★★★★
()
Ответ на: комментарий от EXL

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

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

my shit commit

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

Deleted
()
Ответ на: комментарий от Deleted

но иногда выбора нет

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

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

EXL ★★★★★
()
Ответ на: комментарий от EXL

Ну конкретно в данном случае я не спорю

на это внимания не обратил

Deleted
()
Ответ на: комментарий от KennyMinigun

И есть мегабайты дерьмища во всех копиях.

slovazap ★★★★★
()

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

Первое:

git reset HEAD^
Заметьте, без --hard. Рабочая директория не изменится, но коммит откатится. Дальше можно сделать новый коммит без дерьмища.

Второе:

git rm <дерьмище>
git commit --amend
Просто удалит дерьмище из коммита и working tree.

Дальше

git push --force
чтобы обновить удалённый репозиторий.

slovazap ★★★★★
()
Ответ на: комментарий от Deleted

Что значит «с чего я взял»? Я высказал оценочное суждение о том, что мастер корёжить не стоит, а индивидуальные бранчи — нет проблем. Мне не кажется, что я что-то взял или положил.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

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

tailgunner ★★★★★
()
Ответ на: комментарий от Miguel

высказал оценочное суждение

В контексте конкретной проблемы и не сделав при этом оговорки. ТС-то наверняка в master залил. И тут прилетает вот это: «а чего-бы не перезаписать?»

Deleted
()
Ответ на: комментарий от tailgunner

Ну, допустим. Тогда разбираться надо.

Miguel ★★★★★
()
Ответ на: комментарий от tailgunner

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

Ну у каждого свой воркфлоу, в некоторых командах делают ребейс на голову и мердж (без мердж коммита), тоже самое между долгоживущими ветками. Да и если бы ТС трудился над чем-то важным то доступ на изменение истории в мастере ему бы был закрыт.

anonymous
()
Ответ на: комментарий от Deleted

Ну, примерно с того же, с чего ты взял, что это master. И твой ответ подходит на 100%.

Miguel ★★★★★
()
15 апреля 2019 г.
Ответ на: комментарий от Deleted

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

Ну вот я поискал в Интернете ответ на этот вопрос. И за пару минут нашёл эту страницу, с предложением погуглить :-) Пожалуйста, не надо отвечать, что что-то гуглится, это, с одной стороны, и так очевидно, а, с другой, сильно раздражает тех, кто потом гуглит и, в результате, находит советы погуглить.

askh ★★★★
()
Ответ на: комментарий от perl5_guy

Никак. Ты опозорился и этот крест будешь нести с собой до гробовой доски

Немного несвоевременный троллинг :-) Правильный ответ подсказали ещё около года назад: Как удалить коммит в удаленном репозитории? (комментарий)

askh ★★★★
()
Ответ на: комментарий от perl5_guy

Он наверняка всё давно сделал... Тему я поднял, когда гуглил ответ на аналогичный вопрос и нашёл комментарий с предложением погуглить. Перспектива бесконечной рекурсии меня несколько огорчила, и я высказал своё «фи» автору комментария.

askh ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.