Git est un outil efficace qui garde une trace de votre code. Et l'une des grandes fonctionnalités de l'outil est que vous pouvez facilement vérifier votre historique et revenir si vous avez fait une erreur. Créons une situation où vous pouvez retourner le dernier engagement et voir comment fonctionne la commande Git REVERT.
Nous allons commencer par ajouter quelques fichiers. Sur le dernier engagement, nous allons à la fois ajouter et supprimer des fichiers pour créer une situation désordonnée. Ensuite, nous allons revenir à l'État avant le chaos.
Vous pouvez créer un dossier appelé / tester et exécuter les commandes suivantes pour initialiser GIT et créer la situation décrite ci-dessus (nous faisons intentionnellement des engins séparés pour créer un historique):
$ git init
Initialisé le référentiel git vide dans / utilisateurs / zakh_eecs / _Work / Learngit / git_revert / test /.git /
$ echo x> file_1.SMS
$ git add -a
$ git commit -m "Ajouter un fichier_1.SMS"
[Master (Root-Commit) 08CAF5D] Ajout de fichiers_1.SMS
1 fichier modifié, 1 insertion (+)
Créer le mode 100644 File_1.SMS
$ echo y> file_2.SMS
$ git add -a
$ git commit -m "Ajouter un fichier_2.SMS"
[maître ba18a2f] Ajout de fichiers_2.SMS
1 fichier modifié, 1 insertion (+)
Créer le mode 100644 file_2.SMS
$ echo z> file_3.SMS
$ git add -a
$ git commit -m "Ajouter un fichier_3.SMS"
[Master 97f09ad] Ajout de fichiers_3.SMS
1 fichier modifié, 1 insertion (+)
Créer le mode 100644 File_3.SMS
$ echo u> file_4.SMS
$ git add -a
$ git commit -m "Ajouter un fichier_4.SMS"
[Master 9CAF084] Ajout de fichiers_4.SMS
1 fichier modifié, 1 insertion (+)
Créer le mode 100644 File_4.SMS
$ echo v> file_5.SMS
$ git add -a
$ git commit -m "Ajouter un fichier_5.SMS"
[Master 3F228B2] Ajout de fichiers_5.SMS
1 fichier modifié, 1 insertion (+)
Créer le mode 100644 File_5.SMS
Si nous vérifions notre dossier, nous devrions voir la situation suivante:
$ ls -1
fichier_1.SMS
file_2.SMS
file_3.SMS
fichier_4.SMS
fichier_5.SMS
Si nous vérifions l'histoire, nous devons avoir les fichiers suivants:
$ Git Log --Oneline
3F228B2 Ajout de fichiers_5.SMS
9CAF084 Ajout de fichiers_4.SMS
97f09ad ajout de fichiers_3.SMS
ba18a2f ajout de file_2.SMS
08caf5d ajout de fichiers_1.SMS
Créons maintenant des ravages, nous allons supprimer quelques fichiers et ajouter un mauvais fichier.
$ rm file_2.SMS
$ rm file_4.SMS
$ echo w> my_bad_file.SMS
$ git add -a
$ git commit -m "Fichiers ajoutés et supprimés sans penser aux conséquences"
[Master 879FBF8] Ajout et supprimé des fichiers sans réfléchir aux conséquences
3 fichiers modifiés, 1 insertion (+), 2 suppressions (-)
Supprimer le mode 100644 file_2.SMS
Supprimer le mode 100644 file_4.SMS
Créer le mode 100644 MY_BAD_FILE.SMS
Maintenant, c'est la condition de notre dossier:
$ ls -1
fichier_1.SMS
file_3.SMS
fichier_5.SMS
my_bad_file.SMS
Et c'est la condition de notre histoire:
$ Git Log --Oneline
879FBF8 Fichiers ajoutés et supprimés sans penser aux conséquences
3F228B2 Ajout de fichiers_5.SMS
9CAF084 Ajout de fichiers_4.SMS
97f09ad ajout de fichiers_3.SMS
ba18a2f ajout de file_2.SMS
08caf5d ajout de fichiers_1.SMS
Nous réalisons que nous ne voulons pas le dernier engagement 879fbf8. Nous utilisons donc la commande REVERT suivante:
$ git REVERT 879FBF8
Il ouvrira une fenêtre de texte pour modifier le commentaire automatique:
Retournez "des fichiers ajoutés et supprimés sans penser aux conséquences"
Cela revient à valider 879FBF849C4BD6FB9A377604D6355C76B92A832C.
# Veuillez saisir le message de validation pour vos modifications. Les lignes commençant
# avec '#' sera ignoré, et un message vide interdit le commit.
# Sur Branch Master
# Modifications à engager:
# nouveau fichier: file_2.SMS
# nouveau fichier: file_4.SMS
# supprimé: my_bad_file.SMS
#
Vous pouvez modifier le commentaire. Nous allons le garder tel qu'il est. Dès que vous enregistrez la fenêtre de commentaire, la tâche de retour aura lieu:
$ git REVERT 879FBF8
[Master 6E80F0E] Retournez "Ajout et supprimé Fichiers sans réfléchir aux conséquences"
3 fichiers modifiés, 2 insertions (+), 1 suppression (-)
Créer le mode 100644 file_2.SMS
Créer le mode 100644 File_4.SMS
Supprimer le mode 100644 MY_BAD_FILE.SMS
Regardons notre dossier maintenant:
$ ls -1
fichier_1.SMS
file_2.SMS
file_3.SMS
fichier_4.SMS
fichier_5.SMS
Nos fichiers sont de retour en séquence comme avant. Tous les ajouts et suppressions ont été retournés. Vérifions le journal:
$ Git Log --Oneline
6E80F0E REVERSE "Fichiers ajoutés et supprimés sans réfléchir aux conséquences"
879FBF8 Fichiers ajoutés et supprimés sans penser aux conséquences
3F228B2 Ajout de fichiers_5.SMS
9CAF084 Ajout de fichiers_4.SMS
97f09ad ajout de fichiers_3.SMS
ba18a2f ajout de file_2.SMS
08caf5d ajout de fichiers_1.SMS
Il y a un nouveau engagement 6E80F0E. Tout changement qui faisait partie de 879fbf8 a été défait puis engagé dans 6E80F0E.
Avertissement: La commande git réinitialisée vous permet également d'annuler les commits. Mais dans le cas de réinitialisation (en particulier réinitialisé), il aurait supprimé le 879fbf8 s'engager comme si cela ne s'était jamais produit et il n'y aurait pas eu 6E80F0E commettre. Avec une commande de retour, tout le monde peut voir les changements qui ont eu lieu. Dans le cas de réinitialisation, aucune trace n'est laissée. C'est donc une mauvaise idée d'utiliser la commande de réinitialisation dans un référentiel public car cela peut provoquer une confusion massive. La règle d'or est - n'utilisez pas de réinitialisation dans les référentiels publics, utilisez REVERT qui est plus sûr.
En conclusion:
La commande Git Revert est un moyen rapide et pratique de remédier à vos erreurs. C'est une commande dont vous devez vous souvenir si vous travaillez régulièrement avec Git.
Une étude plus approfondie:
- https: // git-scm.com / docs / git-revert
- https: // git-scm.com / docs / git-reset
- Git: Apprenez le contrôle de la version avec Git: un guide des débutants ultime étape par étape
- Contrôle de version avec Git: outils et techniques puissants pour le développement de logiciels collaboratifs
- Pro git, 2e édition