Outils pour utilisateurs

Outils du site


dev:git:cas-pratiques:deplacer_pointeur_head

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
dev:git:cas-pratiques:deplacer_pointeur_head [2021/11/01 23:16] yoanndev:git:cas-pratiques:deplacer_pointeur_head [2022/01/25 21:01] (Version actuelle) yoann
Ligne 1: Ligne 1:
-{{tag>dev git}}+{{tag>dev git supprimer blob commit}}
  
  
Ligne 13: Ligne 13:
 git reset --hard 0cb5c64 git reset --hard 0cb5c64
 </code> </code>
 +
 +Le blob précédemment pointé par le HEAD n'est alors plus référencé mais il est conservé dans le dépôt. Git conserve un moment les données pour permettre à l'utilisateur de rattraper d'éventuelles erreurs de manipulation.
 +
 +Il est possible de forcer le nettoyage du dépôt, ce qui conduira à la suppression de tous les objets non référencés:
 +
 +<note warning>
 +Les commandes ci-dessous suppriment des objets que vous pourriez vouloir conserver: stashs, vieux historiques ne se trouvant pas sur des branches, etc. En cas de doute, se référer à la documentation officielle et sauvegarder le dépôt avant toute modification.
 +</note>
 +
 +<code bash>
 +git reflog expire --expire-unreachable=now --all
 +git gc --prune=now
 +</code>
 +
 +===== Exemple =====
 +
 +Dans l'exemple ci-dessous on souhaite abandonner les modifications apportées sur la branche master et ne conserver que le travail de la branche de dev, on va déplacer l'étiquette master vers dev
 +<code bash>
 +* ccc3065 (HEAD -> master) Modification fileA.txt
 +| * 3dd7f5b (dev) Ajout fichier B
 +|/  
 +* c21ec74 Import initial
 +</code>
 +
 +<code bash>
 +git checkout master 
 +git reset --hard 3dd7f5b
 +</code>
 +
 +Si on affiche à nouveau l'historique, le blob ccc3065 pointé précédemment par le head n’apparaît plus:
 +<code bash>
 +* 3dd7f5b (HEAD -> master, dev) Ajout fichier B
 +* c21ec74 Import initial
 +</code>
 +
 +master et dev pointent sur le blob 3dd7f5b. On peut cependant encore afficher le blob ccc3065:
 +
 +<code>
 +git show ccc3065
 +commit ccc3065cf197b028de87a4786aa64a7ac19f1454
 +Author: Yoann BEZILLE <yoann.bezille@mairie-tournefeuille.fr>
 +Date:   Tue Jan 25 21:16:42 2022 +0100
 +
 +    Modification fileA.txt
 +. . .
 +</code>
 +
 +La commande git show présente le SHA complet, on retrouve l'objet dans le dépôt:
 +<code bash>
 +cd .git/objects/cc/
 +ls -l
 +total 4
 +-r-------- 1 yoann yoann 848 janv. 25 21:16 c3065cf197b028de87a4786aa64a7ac19f1454
 +</code>
 +
 +Pour forcer la suppression de tous les objets détachés de toute branche:
 +<code bash>
 +git reflog expire --expire-unreachable=now --all
 +git gc --prune=now
 +</code>
 +
 +Après exécution des commandes ci-dessus, le blob n'existe plus:
 +<code bash>
 +git show ccc3065
 +fatal: argument 'ccc3065' ambigu : révision inconnue ou chemin inexistant.
 +</code>
 +
 +===== Références =====
 +
 +  * https://stackoverflow.com/questions/1904860/how-to-remove-unreferenced-blobs-from-my-git-repository
dev/git/cas-pratiques/deplacer_pointeur_head.1635808591.txt.gz · Dernière modification : 2021/11/01 23:16 de yoann