Как удалить ошибочные комманды?

Через комедию ошибок noob я обнаруживаю себя в следующей ситуации в локальном репо:

alt text

Используя git reset, я маневрировал теги ветвей туда, где я их хочу, и теперь я хотел бы удалить 3 коммита на том, что выглядит как неназванная ветвь. Я успешно изучил/пробовал различные вещи, включая gc, prune.

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

Итак, вопрос: как я могу удалить эти коммиты?

Ответы

Ответ 1

Вы просмотрели reflog? Он отслеживает каждый способ, с помощью которого HEAD перемещается внутри вашего репозитория (и выполняет свою работу, предотвращая автоматическое удаление ваших коммитов).

Изучите его с помощью git reflog или git log -g. Удалите его с помощью git reflog expire --expire=now --all, а затем вы можете мусор собирать неиспользуемые коммиты.

Ответ 2

jleedev answer, безусловно, их убьют, но я действительно не думаю, что вы должны это сделать.

Коммиты будут автоматически очищаться следующим gc (который запускается автоматически несколькими командами клавиш), когда они больше не находятся в reflog, срок действия которых истекает через 90 дней. То есть, они в конце концов исчезнут; git просто удерживая вас от удаления всего, что вы, возможно, не хотели.

Если вам просто нужно видеть их в gitk, все, что вам нужно сделать, это перезагрузить представление (или перезапустить gitk). Теперь, когда эти коммиты не находятся на ветке, они не будут показаны. Да, они все равно будут в вашем репозитории, но если у вас не хватает дискового пространства, это не повредит вам. Это просто защитная сетка.