Comment réinitialiser complètement un référentiel Git (y compris les fichiers non suivis)

0
270

Les commandes Git sont compliquées, et vous vous surprenez souvent à penser :“Vissez ça, je vais juste recommencer ! ” Heureusement, Git est conçu pour suivre chaque version de vos modifications, et si vous vous trompez, il fournit des outils pour réinitialiser votre référentiel à son ancien état de fonctionnement.

Enregistrement de vos modifications (Git Stash)

Avant de lancer une commande pour réinitialiser votre référentiel, vous devez vous assurer de ne pas perdre les données que vous souhaitez enregistrer.

Git fournit différents types de réinitialisations. Les réinitialisations logicielles et mixtes réinitialiseront le référentiel à l'état dans lequel il se trouvait à un certain commit (souvent le HEAD d'une branche), mais conserveront vos modifications locales que vous n'avez pas encore validées. Les réinitialisations matérielles, en revanche, sont destructrices et annuleront les modifications qui n'ont pas encore été validées.

Souvent, une réinitialisation matérielle est nécessaire pour nettoyer correctement le référentiel. Si vous le souhaitez, vous pouvez “cacher” vos modifications, qui prendront toutes les modifications non validées et les stockeront localement. Vous pouvez ouvrir la cachette avec “stash apply” plus tard.

git stash git stash appliquez

Vous pouvez également créer une nouvelle branche, valider les modifications, puis réinitialiser à master. Cela conserverait vos modifications dans l'historique des commits pour toujours et pourrait également être envoyé au contrôle de source distant pour être partagé avec vos collègues.

Effectuer une réinitialisation ( Git Reset)

Tout d'abord, vous devez récupérer le dernier état du référentiel distant, généralement “origin,” puis extrayez la branche master (ou celle sur laquelle vous réinitialisez).

git fetch origin git checkout master Publicité

Vous pouvez également extraire et réinitialiser un commit individuel en utilisant son ID, par exemple, git checkout 342c47a4.

Ensuite, effectuez une réinitialisation matérielle (sauf si vous souhaitez conserver les modifications avec une réinitialisation logicielle). Gardez à l'esprit que cette opération est destructrice de toute modification non enregistrée.

git reset –hard origin/master

Vous pouvez réinitialiser sur un commit local au lieu de origin/master, mais la plupart des l'heure à laquelle vous réinitialisez l'état de la télécommande.

Réinitialisation des fichiers non suivis (Git Clean)

Cependant, git reset n'est généralement pas suffisant. La réinitialisation dans Git ne réinitialise que les fichiers réellement suivis par Git. Cela inclut le code et les ressources qui reçoivent des modifications.

Cependant, il existe également des fichiers tels que des packages, une configuration locale, des artefacts/sorties de build, des fichiers journaux et d'autres éléments transitoires qui ne sont pas stockés dans Git. référentiel (et ignoré dans .gitignore). Pour les nettoyer et amener votre dépôt local à 100 % de parité avec l'état de la télécommande, vous pouvez exécuter git clean :

git clean -d –force Advertisement

Vous pouvez en fait exécuter cette commande sans exécuter git reset, ce qui peut en fait être ce que vous voulez. Si vous ne souhaitez pas modifier vos fichiers de code, mais que vous souhaitez effacer vos builds, journaux et packages pour recommencer, git clean peut être tout ce dont vous avez besoin.

Abandonner à la place : cloner un nouveau dépôt

Alors que ce qui précède est la “méthode propre” pour le faire avec les commandes Git officielles, effectuer une réinitialisation complète n'est pas très éloigné de simplement détruire votre dossier de référentiel local et d'en cloner un tout nouveau. Il n'y a aucune honte à faire cela si vous envisagez de tout réinitialiser de toute façon :

sudo rm -r git-repository git clone https://github.com/user/git-repository.git cd git-repository

Gardez à l'esprit que cela ne peut être réinitialisé qu'à l'état de votre référentiel distant, pas à un commit local. Cela clonera la branche master par défaut, mais vous pouvez basculer vers la branche de votre choix avec git switch ou la cloner depuis le début avec git clone -b <branchname>.