Comment restaurer des fichiers et des dossiers individuels vers d’anciennes versions dans Git
Git est un outil puissant pour suivre chaque version de votre base de code, et il est souvent nécessaire de remonter dans le temps et de récupérer d’anciennes versions de fichiers. Git peut annuler des validations entières ou réinitialiser l’intégralité du référentiel, mais il peut également annuler les modifications apportées à un seul fichier ou dossier.
Sommaire
Rétablir ou réinitialiser
Habituellement, lorsque vous « annulez » un commit, Git applique un nouveau commit en appliquant les modifications opposées, l’annulant ainsi. Ceci est utile si vous faites une erreur et avez besoin de « supprimer » ce commit, bien qu’il soit toujours enregistré dans l’historique.
La réinitialisation du référentiel est un peu différente. Vous ne pouvez annuler qu’un seul commit à la fois, mais si vous faites un git reset
, Git modifiera complètement l’état du dépôt au moment où ce commit a été effectué. Ceci est fait pour de nombreuses raisons, généralement pour supprimer des commits ou corriger l’historique de la branche.
Ces deux opérations fonctionnent sur l’ensemble du référentiel, mais vous pouvez également utiliser des commandes similaires pour effectuer les mêmes actions sur des fichiers ou des dossiers individuels. Par exemple, en utilisant git reset
sur un seul fichier rétablira ce fichier tel qu’il était au moment de la validation. Ceci est utile si vous souhaitez simplement sélectionner une ancienne version du fichier dans votre historique Git.
Regarder les anciennes versions dans Git
La solution low-tech pour remettre un fichier à son état d’origine est assez simple : Github et la plupart des autres serveurs Git gardent une trace de l’historique de vos fichiers, et vous pouvez simplement cliquer sur un commit et cliquer sur « Parcourir les fichiers » pour afficher un instantané de votre référentiel de retour dans le temps. Vous pouvez ensuite télécharger le fichier ou copier le texte dessus.
Ceci est particulièrement utile si vous travaillez avec des fichiers de code volumineux et que vous souhaitez consulter les anciennes versions des fonctions que vous avez écrites. Vous ne voulez probablement pas tout annuler dans ce cas, juste la fonction unique. Vous pouvez copier le code de cette fonction sans toucher à la CLI Git.
Réinitialiser un fichier à une ancienne version dans Git
Dans ce référentiel de test, nous avons fait un commit qui a édité le README et ajouté un nouveau fichier. Nous voulons annuler les modifications apportées au README, mais nous ne voulons pas réinitialiser l’intégralité du dépôt au commit initial.
La solution consiste à réinitialiser uniquement le README en extrayant une ancienne version de ce fichier. Git est checkout
La commande fait beaucoup de choses, comme changer de branche, mais elle est essentiellement utilisée pour télécharger des fichiers avec un ID de validation ou de branche.
Pour réinitialiser un fichier à une ancienne version, vous devrez trouver l’ID de validation à partir duquel vous souhaitez réinitialiser. Vous pouvez utiliser git log
pour cela, limité à un seul fichier pour afficher uniquement les modifications apportées à ce fichier :
git log README.md
Copiez l’ID du commit, puis exécutez git checkout
avec l’ID et le chemin du fichier :
git checkout 22710694b25d7ce5297559851beb7d3e4de811bb README.md
Cela modifiera le fichier, mais ne validera pas encore les modifications. Vous êtes libre de le modifier et de vous engager lorsque vous êtes prêt.
Dans cet exemple, git checkout
mis en scène les changements pour le prochain commit. Si vous ne souhaitez pas les valider, vous êtes libre d’annuler les modifications. Cela peut être utile pour télécharger temporairement d’anciennes versions de fichiers sans utiliser Github.
Annulation des modifications apportées à des fichiers uniques
De même, si vous souhaitez annuler les modifications dans un seul commit, vous pouvez le faire avec git revert
. Cependant, il n’y a aucun moyen de l’appliquer à un seul fichier, mais vous pouvez simplement ignorer les modifications si la validation affecte d’autres fichiers.
Utilisez le --no-commit
flag pour autoriser l’édition du « revert commit » que Git crée automatiquement.
git revert de8564b131ca6a15a7e7c73f5ef156b119cc0b93
Cela vous permettra de modifier les fichiers avant de finaliser le retour. S’il y a des changements indésirables mis en place, vous pouvez les supprimer via votre client, ou avec un vide git checkout
.
git checkout -- file