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.

[[email protected] src]$ pwd
/home/jerry/jerry_repo/project/src

[[email protected] src]$ git status -s
M string_operations.c

[[email protected] src]$ git checkout string_operations.c

[[email protected] 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.

[[email protected] src]$ pwd
/home/tom/top_repo/project/src

[[email protected] src]$ ls -1
Makefile
string_operations.c

[[email protected] src]$ rm string_operations.c

[[email protected] src]$ ls -1
Makefile

[[email protected] 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.

[[email protected] src]$ git checkout string_operations.c

[[email protected] src]$ ls -1
Makefile
string_operations.c

[[email protected] 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.

[email protected] src]$ pwd
/home/tom/top_repo/project/src
# Unmodified file

[[email protected] src]$ git status -s

# Modify file and view it’s status.
[[email protected] src]$ git status -s
M string_operations.c

[[email protected] 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.

[[email protected] src]$ git checkout HEAD -- string_operations.c

[[email protected] 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.

[[email protected] project]$ cat .git/refs/heads/master
577647211ed44fe2ae479427a0668a4f12ed71a1

Maintenant, affichez le dernier ID de validation, qui correspondra à l'ID de validation ci-dessus.

[[email protected] 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.

[[email protected] 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.

[[email protected] 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.

[email protected] 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.

[[email protected] src]$ pwd
/home/jerry/jerry_repo/project/src

[[email protected] 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.

[[email protected] 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.

[[email protected] 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.

[[email protected] src]$ git add string_operations.c
[[email protected] 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.

[[email protected] 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.

[[email protected] src]$ git status -s

L'état de Git indique que le fichier a été rétabli de la zone de préparation.

[[email protected] 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.