Git - Corriger les erreurs
L'erreur est humaine. Ainsi, chaque VCS fournit une fonctionnalité pour corriger les erreurs jusqu'à un certain point. Git fournit une fonctionnalité que nous pouvons utiliser pour annuler les modifications apportées au référentiel local.
Supposons que l'utilisateur effectue accidentellement des modifications dans son référentiel local et souhaite ensuite annuler ces modifications. Dans de tels cas, lerevert l'opération joue un rôle important.
Annuler les modifications non validées
Supposons que Jerry modifie accidentellement un fichier de son référentiel local. Mais il veut annuler sa modification. Pour gérer cette situation, nous pouvons utiliser legit checkoutcommander. Nous pouvons utiliser cette commande pour restaurer le contenu d'un fichier.
[jerry@CentOS src]$ pwd
/home/jerry/jerry_repo/project/src
[jerry@CentOS src]$ git status -s
M string_operations.c
[jerry@CentOS src]$ git checkout string_operations.c
[jerry@CentOS src]$ git status –s
De plus, nous pouvons utiliser le git checkoutcommande pour obtenir un fichier supprimé du référentiel local. Supposons que Tom supprime un fichier du référentiel local et que nous souhaitons récupérer ce fichier. Nous pouvons y parvenir en utilisant la même commande.
[tom@CentOS src]$ pwd
/home/tom/top_repo/project/src
[tom@CentOS src]$ ls -1
Makefile
string_operations.c
[tom@CentOS src]$ rm string_operations.c
[tom@CentOS src]$ ls -1
Makefile
[tom@CentOS src]$ git status -s
D string_operations.c
Git montre la lettre Davant le nom de fichier. Cela indique que le fichier a été supprimé du référentiel local.
[tom@CentOS src]$ git checkout string_operations.c
[tom@CentOS src]$ ls -1
Makefile
string_operations.c
[tom@CentOS src]$ git status -s
Note - Nous pouvons effectuer toutes ces opérations avant de commettre.
Supprimer les modifications de la zone de transit
Nous avons vu que lorsque nous effectuons une opération d'ajout, les fichiers sont déplacés du référentiel local vers la zone de déclaration. Si un utilisateur modifie accidentellement un fichier et l'ajoute dans la zone de préparation, il peut annuler ses modifications, en utilisant legit checkout commander.
Dans Git, il existe un pointeur HEAD qui pointe toujours vers le dernier commit. Si vous souhaitez annuler une modification de la zone intermédiaire, vous pouvez utiliser la commande git checkout, mais avec la commande checkout, vous devez fournir un paramètre supplémentaire, à savoir le pointeur HEAD. Le paramètre de pointeur de validation supplémentaire indique à la commande git checkout de réinitialiser l'arborescence de travail et également de supprimer les modifications par étapes.
Supposons que Tom modifie un fichier de son référentiel local. Si nous visualisons l'état de ce fichier, cela montrera que le fichier a été modifié mais pas ajouté dans la zone de transit.
tom@CentOS src]$ pwd
/home/tom/top_repo/project/src
# Unmodified file
[tom@CentOS src]$ git status -s
# Modify file and view it’s status.
[tom@CentOS src]$ git status -s
M string_operations.c
[tom@CentOS src]$ git add string_operations.c
Git status montre que le fichier est présent dans la zone de préparation, rétablissez-le maintenant en utilisant la commande git checkout et affichez l'état du fichier rétabli.
[tom@CentOS src]$ git checkout HEAD -- string_operations.c
[tom@CentOS src]$ git status -s
Déplacer le pointeur HEAD avec la réinitialisation de Git
Après avoir effectué quelques modifications, vous pouvez décider de supprimer ces modifications. La commande de réinitialisation Git est utilisée pour réinitialiser ou annuler les modifications. Nous pouvons effectuer trois types différents d'opérations de réinitialisation.
Le diagramme ci-dessous montre la représentation graphique de la commande de réinitialisation Git.
Doux
Chaque branche a un pointeur HEAD, qui pointe vers le dernier commit. Si nous utilisons la commande de réinitialisation Git avec l'option --soft suivie de l'ID de validation, cela réinitialisera le pointeur HEAD uniquement sans rien détruire.
.git/refs/heads/masterLe fichier stocke l'ID de validation du pointeur HEAD. Nous pouvons le vérifier en utilisant legit log -1 commander.
[jerry@CentOS project]$ cat .git/refs/heads/master
577647211ed44fe2ae479427a0668a4f12ed71a1
Maintenant, affichez le dernier ID de validation, qui correspondra à l'ID de validation ci-dessus.
[jerry@CentOS project]$ git log -2
La commande ci-dessus produira le résultat suivant.
commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 10:21:20 2013 +0530
Removed executable binary
commit 29af9d45947dc044e33d69b9141d8d2dad37cc62
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 10:16:25 2013 +0530
Added compiled binary
Réinitialisons le pointeur HEAD.
[jerry@CentOS project]$ git reset --soft HEAD~
Maintenant, nous réinitialisons simplement le pointeur HEAD d'une position. Laissez-nous vérifier le contenu de.git/refs/heads/master file.
[jerry@CentOS project]$ cat .git/refs/heads/master
29af9d45947dc044e33d69b9141d8d2dad37cc62
L'ID de validation du fichier est modifié, vérifiez-le maintenant en affichant les messages de validation.
jerry@CentOS project]$ git log -2
La commande ci-dessus produira le résultat suivant.
commit 29af9d45947dc044e33d69b9141d8d2dad37cc62
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 10:16:25 2013 +0530
Added compiled binary
commit 94f7b26005f856f1a1b733ad438e97a0cd509c1a
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 10:08:01 2013 +0530
Added Makefile and renamed strings.c to string_operations.c
mixte
Git reset avec l'option --mixed annule les modifications de la zone de préparation qui n'ont pas encore été validées. Il annule uniquement les modifications de la zone de transit. Les modifications réelles apportées à la copie de travail du fichier ne sont pas affectées. La réinitialisation Git par défaut est équivalente à la réinitialisation git - mixed.
dur
Si vous utilisez l'option --hard avec la commande Git reset, cela effacera la zone de préparation; il réinitialisera le pointeur HEAD à la dernière validation de l'ID de validation spécifique et supprimera également les modifications du fichier local.
Vérifions l'ID de validation.
[jerry@CentOS src]$ pwd
/home/jerry/jerry_repo/project/src
[jerry@CentOS src]$ git log -1
La commande ci-dessus produira le résultat suivant.
commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 10:21:20 2013 +0530
Removed executable binary
Jerry a modifié un fichier en ajoutant un commentaire sur une seule ligne au début du fichier.
[jerry@CentOS src]$ head -2 string_operations.c
/* This line be removed by git reset operation */
#include <stdio.h>
Il l'a vérifié en utilisant la commande git status.
[jerry@CentOS src]$ git status -s
M string_operations.c
Jerry ajoute le fichier modifié à la zone de préparation et le vérifie avec la commande git status.
[jerry@CentOS src]$ git add string_operations.c
[jerry@CentOS src]$ git status
La commande ci-dessus produira le résultat suivant.
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#
modified: string_operations.c
#
L'état de Git indique que le fichier est présent dans la zone de préparation. Maintenant, réinitialisez HEAD avec l'option - hard.
[jerry@CentOS src]$ git reset --hard 577647211ed44fe2ae479427a0668a4f12ed71a1
HEAD is now at 5776472 Removed executable binary
La commande de réinitialisation Git a réussi, ce qui rétablira le fichier de la zone de préparation et supprimera toutes les modifications locales apportées au fichier.
[jerry@CentOS src]$ git status -s
L'état de Git indique que le fichier a été rétabli de la zone de préparation.
[jerry@CentOS src]$ head -2 string_operations.c
#include <stdio.h>
La commande head montre également que l'opération de réinitialisation a également supprimé les modifications locales.