Un dangling commit est un commit qui n'est pas associé à une référence, c'est-à-dire qu'il n'y a aucun moyen de l'atteindre.
Par exemple, considérez le diagramme ci-dessous. Supposons que nous supprimions la branche featureX sans fusionner ses changements, alors le commit D deviendra un dangling commit parce qu'il n'y a pas de référence qui lui est associée. S'il avait été fusionné dans master, alors les références HEAD et master auraient pointé vers le commit D et il ne serait plus dangling, même si nous avons supprimé featureX. Lisez la note après le diagramme pour mieux comprendre cela.
Git fait automatiquement le garbage collector, c'est-à-dire qu'il se débarrasse des commits en suspens. Nous pouvons utiliser le git reflog
pour récupérer une branche (de commits pendants) qui a été supprimée sans être fusionnée. Nous pouvons récupérer les commits supprimés seulement s'ils sont présents dans le magasin d'objets local. S'il a été collecté, alors nous ne pouvons pas le récupérer.
NOTE qu'un nom de branche, c'est-à-dire une étiquette de branche, est en fait une référence au dernier commit sur une branche ou à l'extrémité de la branche. Dans le diagramme ci-dessus, featureX, master et HEAD sont juste des références à des commits spécifiques. Les étiquettes featureX et master font référence aux derniers commits sur leurs branches respectives. HEAD fait généralement référence à l'extrémité de la branche actuellement extraite (master dans ce cas). Si vous extrayez un commit plus ancien sur votre branche actuelle, alors HEAD sera dans un état détaché, c'est-à-dire qu'il pointera vers le commit plus ancien au lieu du plus récent. Notez également que HEAD est appelé une référence symbolique parce qu'il pointe en fait vers l'étiquette de la branche actuelle et que toute étiquette de branche pointe toujours vers l'extrémité de la branche. Donc, dans des circonstances normales, HEAD pointe indirectement vers le dernier commit.
En passant, notez que Git représente son graphique/historique de commit sous la forme de graphe acyclique dirigé . Chaque commit a une référence à son parent. Par conséquent, les flèches dans un diagramme de commit pointent du commit enfant au commit parent. Nous avons besoin d'une référence au dernier commit enfant afin d'atteindre les commits plus anciens sur une branche.
PS - Le diagramme et la compréhension ci-dessus ont été obtenus à partir de ce cours gratuit . Même si le cours est assez ancien, les connaissances sont toujours pertinentes.