Висячий коммит - это коммит, который не связан со ссылкой, т. Е. Нет способа его достичь.
Например, рассмотрите диаграмму ниже. Предположим, что мы удаляем ветку featureX без объединения его изменений, тогда коммит D станет висячим коммитом, потому что с ним не связано ни одной ссылки. Если бы он был объединен с master, то ссылки HEAD и master указали бы на коммит D, и он больше не зависал бы, даже если бы мы удалили featureX. Прочитайте примечание после диаграммы, чтобы понять это лучше.
Git автоматически собирает мусор (т.е. удаляет) висячие коммиты. Мы можем использовать git reflog
для восстановления ветку (висячих коммитов), которая была удалена без слияния. Мы можем восстановить удаленные коммиты, только если они присутствуют в локальном хранилище объектов. Если это был мусор, то мы не можем его восстановить.
ОБРАТИТЕ ВНИМАНИЕ, что имя ветви, то есть метка ветви, на самом деле является ссылкой на последний коммит в ветви, то есть на вершину ветви. На приведенной выше диаграмме featureX, master и HEAD являются просто ссылками на конкретные коммиты. FeatureX и мастер-метки относятся к последним коммитам в соответствующих ветках. HEAD, как правило, относится к наконечнику текущей проверенной ветви (в данном случае master). Если вы извлекаете более старый коммит в текущей ветке, то HEAD будет в отсоединенном состоянии, то есть он будет указывать на более старый коммит, а не на последний. Также обратите внимание, что HEAD называется символической ссылкой, потому что она фактически указывает на текущую метку ветви, а любая метка ветви всегда указывает на верхушку ветви. Таким образом, в нормальных условиях HEAD косвенно указывает на последний коммит.
Кроме того, обратите внимание, что Git представляет свой граф / историю коммитов в виде ориентированного ациклического графа . Каждый коммит имеет ссылку на него родителя. Следовательно, стрелки на диаграмме фиксации указывают от дочерней фиксации к родительской фиксации. Нам нужна ссылка на последний дочерний коммит, чтобы достичь более старых коммитов на ветке.
PS - Приведенный выше график и понимание были получены из этого бесплатного курса . Хотя курс довольно старый, знания все еще актуальны.
git gc
, и 2) мне вообще не нужно об этом беспокоиться, потому что эти висящие биты нормальны и уже мерзавцы справиться с ними?