Я совершенно не понимаю, как удалить незакрепленную фиксацию в Git - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь выучить Git. Это моя Git история коммитов

Я хочу удалить следующие отдельные коммиты:

  • e4ab7e8
  • 6d93a36
  • 2a604a9
  • f31bf0e

Я возвращаюсь, переустанавливаю и сбрасываю к черту мой репозиторий Git. Но что бы я ни делал, кажется, история коммитов будет только расти. Любая помощь?

1 Ответ

2 голосов
/ 27 мая 2020

Ключ к пониманию этого состоит в том, что Git - это все о коммитах. Каждая фиксация указывает на одну или несколько родительских фиксаций (кроме root фиксации, у которой нет родителя).

Ветви - это просто «метки» для одной фиксации. Эта метка перемещается каждый раз, когда вы создаете новую фиксацию в этой ветке. Следуя родительским точкам коммитов, Git может восстановить историю.

Ветви (помните: метки) также можно перемещать вручную, или их можно перемещать другими операциями помимо фиксации: слияние, сброс, перебазирование , et c.

Когда фиксация становится недостижимой (иногда «болтающейся»), это означает, что ссылка [^ 1] больше не указывает на фиксацию. Ссылка обычно представляет собой ветвь (= Dynami c label) или тег (= stati c label).

Git не удаляет оборванные коммиты сразу, а оставляет их в вашем локальном репозитории. Это позволяет go вернуться в предыдущее состояние, если вы напортачили. Как вы выяснили, старые состояния вашей ветки хранятся в рефлоге. Reflog поддерживает список всех ранее проверенных коммитов.

Записи в reflog истекают через заданный период времени. Следовательно, коммиты сейчас действительно недоступны. Git автоматически запускает сборку мусора при определенных обстоятельствах (время, количество объектов и т. Д. c.). При сборке мусора действительно недостижимые коммиты также будут навсегда удалены из вашего репозитория.

TL; DR: не беспокойтесь о них, они со временем будут удалены.

[^ 1]: short для ссылка

...