Ключ к пониманию этого состоит в том, что Git - это все о коммитах. Каждая фиксация указывает на одну или несколько родительских фиксаций (кроме root фиксации, у которой нет родителя).
Ветви - это просто «метки» для одной фиксации. Эта метка перемещается каждый раз, когда вы создаете новую фиксацию в этой ветке. Следуя родительским точкам коммитов, Git может восстановить историю.
Ветви (помните: метки) также можно перемещать вручную, или их можно перемещать другими операциями помимо фиксации: слияние, сброс, перебазирование , et c.
Когда фиксация становится недостижимой (иногда «болтающейся»), это означает, что ссылка [^ 1] больше не указывает на фиксацию. Ссылка обычно представляет собой ветвь (= Dynami c label) или тег (= stati c label).
Git не удаляет оборванные коммиты сразу, а оставляет их в вашем локальном репозитории. Это позволяет go вернуться в предыдущее состояние, если вы напортачили. Как вы выяснили, старые состояния вашей ветки хранятся в рефлоге. Reflog поддерживает список всех ранее проверенных коммитов.
Записи в reflog истекают через заданный период времени. Следовательно, коммиты сейчас действительно недоступны. Git автоматически запускает сборку мусора при определенных обстоятельствах (время, количество объектов и т. Д. c.). При сборке мусора действительно недостижимые коммиты также будут навсегда удалены из вашего репозитория.
TL; DR: не беспокойтесь о них, они со временем будут удалены.
[^ 1]: short для ссылка