Podczas pracy z repozytorium git możesz skończyć z wycofywaniem się z operacji i wykonywaniem innych ruchów, które powodują pośredniczące obiekty blob, a nawet niektóre rzeczy, które git robi dla ciebie, aby uniknąć utraty informacji.
Ostatecznie (warunkowo, zgodnie ze stroną podręcznika git gc ) dokona czyszczenia pamięci i wyczyści te rzeczy. Można także zmusić go powołując się proces zbierania śmieci, git gc
.
Aby uzyskać więcej informacji na ten temat, zobacz Konserwacja i odzyskiwanie danych w witrynie git-scm.
Ręczne uruchomienie GC domyślnie pozostawia 2 tygodnie przed uruchomieniem tego polecenia sieci bezpieczeństwa. W rzeczywistości zachęcamy do sporadycznego uruchamiania GC, aby zapewnić wydajne wykorzystanie repozytorium git. Jednak jak wszystko, powinieneś zrozumieć, co robi, zanim zniszczysz te rzeczy, które mogą być dla ciebie ważne.
git gc
, i 2) nie muszę się tym wcale martwić, ponieważ te zwisające bity są normalne i już git uchwyt jest nimi?Dangling blob = zmiana, która dotarła do obszaru przejściowego / indeksu, ale nigdy nie została zatwierdzona. Jedną z niesamowitych rzeczy w git jest to, że gdy zostanie dodany do obszaru przejściowego, zawsze możesz go odzyskać, ponieważ te obiekty zachowują się jak commity, ponieważ mają też hash !!
Dangling commit = Zatwierdzenie, do którego nie ma bezpośredniego połączenia z żadnym zatwierdzeniem podrzędnym, rozgałęzieniem, znacznikiem ani innym odniesieniem. Te też możesz odzyskać!
źródło
JAK usunąć wszystkie wiszące zatwierdzenia z repozytorium git z http://www.tekkie.ro/news/howto-remove-all-dangling-commits-from-your-git-repository/
Upewnij się, że naprawdę chcesz je usunąć, ponieważ w końcu możesz zdecydować, że ich potrzebujesz.
źródło
Wiszące zatwierdzenie to zatwierdzenie, które nie jest powiązane z odniesieniem, tj. Nie ma sposobu, aby do niego dotrzeć.
Weźmy na przykład pod uwagę poniższy diagram. Załóżmy, że usuniemy gałąź featureX bez scalania jej zmian, a następnie zatwierdzenie D stanie się wiszącym zatwierdzeniem, ponieważ nie ma z nim skojarzonego odniesienia. Gdyby został scalony ze wzorcem, to odniesienia HEAD i wzorcowe wskazywałyby na zatwierdzenie D i przestałyby wisieć, nawet gdybyśmy usunęli featureX. Przeczytaj uwagę po diagramie, aby lepiej to zrozumieć.
Git automatycznie zbiera śmieci (tj. Usuwa) wiszące zatwierdzenia. Możemy użyć
git reflog
do odzyskania gałęzi (z wiszących zatwierdzeń), która została usunięta bez jej scalania. Możemy odzyskać usunięte zatwierdzenia tylko wtedy, gdy są obecne w lokalnej składnicy obiektów. Jeśli został zebrany jako śmieci, nie możemy go odzyskać.UWAGA że nazwa gałęzi, tj. Etykieta gałęzi, jest w rzeczywistości odniesieniem do ostatniego zatwierdzenia gałęzi, tj. Końcówki gałęzi. Na powyższym diagramie, featureX, master i HEAD są po prostu odniesieniami do konkretnych zatwierdzeń. Etykiety featureX i główne odnoszą się do najnowszych zatwierdzeń w odpowiednich gałęziach. HEAD ogólnie odnosi się do końcówki aktualnie wyewidencjonowanej gałęzi (w tym przypadku master). Jeśli wyrejestrujesz starsze zatwierdzenie w swojej bieżącej gałęzi, to HEAD będzie w stanie odłączonym, tj. Będzie wskazywał na starsze zatwierdzenie zamiast najnowszego. Zwróć również uwagę, że HEAD jest nazywany symbolicznym odniesieniem, ponieważ w rzeczywistości wskazuje na etykietę bieżącej gałęzi, a każda etykieta gałęzi zawsze wskazuje na jej koniec. Zatem w normalnych okolicznościach HEAD pośrednio wskazuje na ostatnie zatwierdzenie.
Na marginesie, zauważ, że Git przedstawia swój wykres / historię zatwierdzeń jako skierowany graf acykliczny . Każde zatwierdzenie ma odniesienie do swojego rodzica. Stąd strzałki na diagramie zatwierdzeń wskazują od zatwierdzenia podrzędnego do zatwierdzenia rodzica. Potrzebujemy odniesienia do najnowszego zatwierdzenia podrzędnego, aby dotrzeć do starszych zatwierdzeń w gałęzi.
PS - Powyższy schemat i zrozumienie uzyskano z tego bezpłatnego kursu . Chociaż kurs jest dość stary, wiedza jest nadal aktualna.
źródło