Comment fonctionne réellement Git Reset ?  Réinitialisations logicielles, matérielles et mixtes expliquées - CloudSavvy IT
Agence web » Actualités du digital » Comment fonctionne réellement Git Reset ? Réinitialisations logicielles, matérielles et mixtes expliquées –

Comment fonctionne réellement Git Reset ? Réinitialisations logicielles, matérielles et mixtes expliquées –

git reset est une commande puissante qui peut modifier l’historique de votre référentiel Git et corriger les erreurs que vous avez commises. Cependant, bien que le nom donne l’impression que son utilisation est effrayante, c’est en fait assez facile, alors parlons de son fonctionnement.

Qu’est-ce que le Git HEAD ?

Avant de comprendre comment fonctionnent les réinitialisations, nous devons parler de Git HEAD.

« HEAD » est simplement un alias pour votre commit de travail actuel. Vous pouvez le voir comme une tête de tourne-disque, où sa position détermine quelles données sont utilisées. Si vous utilisez actuellement le master branche, le HEAD sera au dernier commit dans cette branche.

Bien qu’il s’agisse d’un alias pour un commit, le HEAD ne pointe pas directement vers un commit la plupart du temps. Il pointe vers une branche et utilise automatiquement le dernier commit. Il peut également pointer directement vers un commit, connu sous le nom de « HEAD détachée », bien que cela n’ait pas d’importance pour git reset.

Comment fonctionne la réinitialisation de Git ?

L’historique des commits de Git est stocké sous la forme d’un arbre de commits et est destiné à être immuable pour la plupart. Cependant, il est parfois nécessaire de modifier cet historique, et c’est là que git reset entre en jeu.

Chaque commit est lié au commit précédent et peut se ramifier en différents membres qui seront finalement fusionnés dans le master branche. Dans les deux cas, le HEAD pointe généralement vers le dernier commit de la branche sur laquelle vous travaillez.

Alors, que se passe-t-il lorsque vous effectuez un commit que vous souhaitez annuler ?

Eh bien, en cours d’exécution git reset déplace essentiellement le HEAD en arrière et laisse tous les commits devant lui suspendus. Cela réécrit l’historique Git généralement immuable pour se débarrasser des commits devant le HEAD.

Cela peut être très utile pour de nombreuses raisons. Peut-être avez-vous fait un commit, puis apporté des modifications supplémentaires et voulu pousser le tout en un seul commit. Vous pourriez git reset revenir à la validation précédente, puis revalider correctement.

Ou peut-être avez-vous accidentellement effectué un commit qui incluait des modifications que vous ne vouliez pas suivre. Cela peut être très difficile à comprendre si vous ne savez pas comment git reset fonctionne, mais la réinitialisation du HEAD et ensuite la mise en scène des modifications correctes permettront d’atteindre cet objectif. Notez que ceci est différent de git revert, qui inverse les commits.

Il existe trois types de réinitialisations différentes dans Git, et elles diffèrent toutes en fonction de la façon dont elles gèrent les commits qui restent en suspens. Ils réécrivent tous l’historique de Git, et ils reculent tous le HEAD, mais ils gèrent les changements différemment :

  • git reset --soft, qui conservera vos fichiers et restaurera automatiquement toutes les modifications.
  • git reset --hard, Qui va détruire complètement toutes les modifications et les supprimer du répertoire local. N’utilisez ceci que si vous savez ce que vous faites.
  • git reset --mixed, qui est la valeur par défaut, et garde tous les fichiers identiques mais annule les modifications. C’est l’option la plus flexible, mais malgré son nom, elle ne modifie pas les fichiers.

La différence entre doux et mixte est de savoir si les changements sont mis en scène ou non. Staged est essentiellement une zone intermédiaire entre le répertoire local et l’historique Git. git add fichiers d’étapes, et git commit les écrit à l’histoire. Dans les deux cas, le répertoire local n’est pas affecté, il modifie simplement l’état du suivi de ces modifications par Git.

Fondamentalement, les réinitialisations logicielles et mixtes sont pour la plupart identiques et vous permettent de conserver les modifications, et les réinitialisations matérielles remettront complètement votre répertoire local à l’endroit où il se trouvait au moment de la validation.

Utiliser Git Reset

Une fois que vous comprenez ce qui se passe, utilisez réellement git reset est incroyablement facile. Pour réinitialiser, vous aurez besoin d’une référence au commit vers lequel vous souhaitez revenir. Vous pouvez l’obtenir en exécutant reflog:

git reflog

Copiez le code à sept chiffres sur la droite. Si vous venez de rester coincé dans vim, appuyez sur Q et exécutez peut-être git config --global core.editor "nano".

Ensuite, vous pouvez réinitialiser le commit cible :

git reset --mixed a560612

Ou, vous pouvez cibler les commits en fonction de leur position par rapport au HEAD. La commande suivante cible le commit juste avant le HEAD, ce qui est un raccourci utile si vous devez réinitialiser le dernier commit :

git reset --mixed HEAD~

Si vous utilisez un client Git comme Fork, la réinitialisation est aussi simple que d’un clic droit sur le commit cible et de sélectionner « Réinitialiser » :

Devriez-vous jamais effectuer une réinitialisation matérielle ?

Vous ne devriez vraiment utiliser que des réinitialisations logicielles ou mixtes, mais si vous avez tellement gâché votre référentiel que vous devez le réinitialiser complètement, vous pouvez utiliser la séquence de commandes suivante pour le remettre complètement à la normale.

git fetch origin
git checkout master
git reset --hard origin/master
git clean -d --force

Bien sûr, vous pouvez toujours tirer le classique « supprimer votre référentiel et re-cloner à partir de Github », mais cette méthode est au moins approuvée par Git et ne réinitialise qu’une seule branche.

★★★★★