В ходе работы с вашим репозиторием git вы можете в конечном итоге отказаться от операций и предпринять другие шаги, которые вызывают промежуточные двоичные объекты, и даже некоторые вещи, которые git делает для вас, чтобы избежать потери информации.
В конце концов (условно, согласно странице руководства git gc ) он выполнит сборку мусора и очистит все это. Вы также можете заставить его активируя процесс сбора мусора, git gc
.
Для получения дополнительной информации об этом см. Обслуживание и восстановление данных на сайте git-scm.
Ручной запуск GC по умолчанию уходит за 2 недели до времени выполнения этой команды системы безопасности. Фактически рекомендуется периодически запускать GC, чтобы обеспечить эффективное использование вашего git-репозитория. Как и все остальное, вы должны понимать, что он делает, прежде чем разрушать те вещи, которые могут быть важны для вас.
git gc
, и 2) мне вообще не нужно об этом беспокоиться, потому что эти висящие биты нормальны и уже мерзавцы справиться с ними?Dangling blob = Изменения, которые сделали это в промежуточной области / индексе, но так и не были зафиксированы. Одна вещь, которая удивляет в git, это то, что как только он добавляется в область подготовки, вы всегда можете вернуть его обратно, потому что эти BLOB-объекты ведут себя как коммиты в том смысле, что они тоже имеют хэш !!
Висячий коммит = коммит, который не связан напрямую ни с одним дочерним коммитом, ветвью, тегом или другой ссылкой. Вы можете получить их тоже!
источник
HOWTO удалить все висячие коммиты из вашего git-репозитория с http://www.tekkie.ro/news/howto-remove-all-dangling-commits-from-your-git-repository/
Убедитесь, что вы действительно хотите удалить их, так как вы можете решить, что они вам нужны.
источник
Висячий коммит - это коммит, который не связан со ссылкой, т. Е. Нет способа его достичь.
Например, рассмотрите диаграмму ниже. Предположим, что мы удаляем ветку featureX без объединения его изменений, тогда коммит D станет висячим коммитом, потому что с ним не связано ни одной ссылки. Если бы он был объединен с master, то ссылки HEAD и master указали бы на коммит D, и он больше не зависал бы, даже если бы мы удалили featureX. Прочитайте примечание после диаграммы, чтобы понять это лучше.
Git автоматически собирает мусор (т.е. удаляет) висячие коммиты. Мы можем использовать
git reflog
для восстановления ветку (висячих коммитов), которая была удалена без слияния. Мы можем восстановить удаленные коммиты, только если они присутствуют в локальном хранилище объектов. Если это был мусор, то мы не можем его восстановить.ОБРАТИТЕ ВНИМАНИЕ, что имя ветви, то есть метка ветви, на самом деле является ссылкой на последний коммит в ветви, то есть на вершину ветви. На приведенной выше диаграмме featureX, master и HEAD являются просто ссылками на конкретные коммиты. FeatureX и мастер-метки относятся к последним коммитам в соответствующих ветках. HEAD, как правило, относится к наконечнику текущей проверенной ветви (в данном случае master). Если вы извлекаете более старый коммит в текущей ветке, то HEAD будет в отсоединенном состоянии, то есть он будет указывать на более старый коммит, а не на последний. Также обратите внимание, что HEAD называется символической ссылкой, потому что она фактически указывает на текущую метку ветви, а любая метка ветви всегда указывает на верхушку ветви. Таким образом, в нормальных условиях HEAD косвенно указывает на последний коммит.
Кроме того, обратите внимание, что Git представляет свой граф / историю коммитов в виде ориентированного ациклического графа . Каждый коммит имеет ссылку на него родителя. Следовательно, стрелки на диаграмме фиксации указывают от дочерней фиксации к родительской фиксации. Нам нужна ссылка на последний дочерний коммит, чтобы достичь более старых коммитов на ветке.
PS - Приведенный выше график и понимание были получены из этого бесплатного курса . Хотя курс довольно старый, знания все еще актуальны.
источник