Un commit penzolante è un commit che non è associato al riferimento, cioè non c'è modo di raggiungerlo.
Ad esempio, considera il diagramma seguente. Supponiamo di eliminare il ramo featureX senza unire le sue modifiche, quindi il commit D diventerà un commit pendente perché non è associato alcun riferimento. Se fosse stato unito in master, HEAD e riferimenti master avrebbero indicato il commit di D e non sarebbero più appesi, anche se avessimo eliminato featureX. Leggi la nota dopo il diagramma per capirlo meglio.
Git raccoglie automaticamente i rifiuti (ovvero elimina) i commit sospesi. Possiamo usare il git reflog
per recuperare un ramo (di commit penzolanti) che è stato eliminato senza unirlo. Possiamo recuperare i commit cancellati solo se è presente nell'archivio oggetti locale. Se è stata raccolta spazzatura, non possiamo recuperarla.
NOTA che un nome di ramo, ad esempio un'etichetta di ramo, è in realtà un riferimento all'ultimo commit su un ramo, ovvero la punta del ramo. Nel diagramma sopra, featureX, master e HEAD sono solo riferimenti a commit specifici. Le etichette featureX e master si riferiscono agli ultimi commit nelle rispettive filiali. HEAD si riferisce generalmente alla punta del ramo attualmente estratto (master in questo caso). Se esegui il checkout di un commit più vecchio sul tuo ramo corrente, HEAD sarà in uno stato distaccato, ovvero punterà al commit più vecchio anziché a quello più recente. Si noti inoltre che HEAD è chiamato riferimento simbolico perché in realtà punta all'etichetta del ramo corrente e qualsiasi etichetta di ramo punta sempre alla punta del ramo. Quindi, in circostanze normali, HEAD indica indirettamente l'ultimo commit.
A parte, nota che Git rappresenta il suo grafico / cronologia di commit come un grafico aciclico diretto . Ogni commit ha un riferimento ad esso padre. Quindi, le frecce in un diagramma di commit puntano da commit figlio a commit parent. Abbiamo bisogno di un riferimento all'ultimo commit figlio per raggiungere i commit più vecchi in una filiale.
PS - Il diagramma e la comprensione sopra riportati sono stati ottenuti da questo corso gratuito . Anche se il corso è piuttosto vecchio, la conoscenza è ancora rilevante.
git gc
, e 2) Non ho bisogno di preoccuparmene perché questi bit penzolanti sono normali e già git gestirli?