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.
git gc
, i 2) nie muszę się tym wcale martwić, ponieważ te zwisające bity są normalne i już git uchwyt jest nimi?