Un commit suspendu est un commit qui n'est pas associé à une référence, c'est-à-dire qu'il n'y a aucun moyen d'y accéder.
Par exemple, considérez le diagramme ci-dessous. Supposons que nous supprimions la branche featureX sans fusionner ses modifications, alors le commit D deviendra un commit suspendu car 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 cela ne serait plus en suspens, même si nous supprimions featureX. Lisez la note après le diagramme pour mieux comprendre cela.
Git récupère automatiquement (c'est-à-dire supprime) les commits pendants. Nous pouvons utiliser le git reflog
pour récupérer une branche (de commits en suspens) qui a été supprimée sans la fusionner. Nous ne pouvons récupérer les commits supprimés que s'ils sont présents dans le magasin d'objets local. S'il s'agit d'un ramasse-miettes, nous ne pouvons pas le récupérer.
NOTEZ 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, c'est-à-dire la pointe de la branche. Dans le diagramme ci-dessus, featureX, master et HEAD ne sont que des références à des commits spécifiques. Les libellés featureX et master font référence aux derniers commits sur leurs branches respectives. HEAD fait généralement référence à la pointe 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 l'ancien commit au lieu du dernier. Notez également que HEAD est appelé une référence symbolique car il pointe en fait vers l'étiquette de branche actuelle et toute étiquette de branche pointe toujours vers l'extrémité de la branche. Ainsi, dans des circonstances normales, HEAD pointe indirectement vers le dernier commit.
En passant, notez que Git représente son graphe / historique de commit comme un graphe acyclique dirigé . Chaque commit a une référence à son parent. Par conséquent, les flèches dans un diagramme de validation pointent de la validation enfant à la validation parent. Nous avons besoin d'une référence au dernier commit enfant pour 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.
git gc
, et 2) je n'ai pas besoin de m'inquiéter à ce sujet parce que ces bits pendants sont normaux et git déjà les gérer?