Au cours de l'utilisation de votre référentiel git, vous pouvez finir par vous retirer des opérations et effectuer d'autres mouvements qui provoquent des blobs intermédiaires, et même certaines choses que git fait pour vous aider à éviter la perte d'informations.
Finalement (conditionnellement, selon la page de manuel git gc ), il effectuera un garbage collection et nettoiera ces choses. Vous pouvez également forcer en invoquant le processus de collecte des ordures, git gc
.
Pour plus d'informations à ce sujet, consultez Maintenance et récupération de données sur le site git-scm.
Une exécution manuelle du GC laissera par défaut 2 semaines avant l'exécution de cette commande d'un filet de sécurité. Il est en fait encouragé d'exécuter occasionnellement le GC pour garantir une utilisation performante de votre référentiel git. Comme tout, cependant, vous devez comprendre ce qu'il fait avant de détruire les choses qui peuvent être importantes pour vous.
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?Dangling blob = Une modification qui a été apportée à la zone de préparation / index mais n'a jamais été validée. Une chose qui est incroyable avec git est qu'une fois qu'il est ajouté à la zone de préparation, vous pouvez toujours le récupérer car ces blobs se comportent comme des commits en ce sens qu'ils ont aussi un hachage !!
Dangling commit = Un commit qui n'est pas directement lié par un commit enfant, une branche, une balise ou une autre référence. Vous pouvez aussi les récupérer!
la source
HOWTO supprimer tous les commits pendantes de votre dépôt git de http://www.tekkie.ro/news/howto-remove-all-dangling-commits-from-your-git-repository/
Assurez-vous de vraiment vouloir les supprimer, car vous pourriez décider que vous en avez besoin après tout.
la source
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.
la source