Git - Corregir errores

Errar es humano. Entonces, cada VCS proporciona una función para corregir errores hasta cierto punto. Git proporciona una función que podemos usar para deshacer las modificaciones que se han realizado en el repositorio local.

Suponga que el usuario realiza accidentalmente algunos cambios en su repositorio local y luego quiere deshacer estos cambios. En tales casos, elrevert La operación juega un papel importante.

Revertir cambios no confirmados

Supongamos que Jerry modifica accidentalmente un archivo de su repositorio local. Pero quiere deshacer su modificación. Para manejar esta situación, podemos usar elgit checkoutmando. Podemos usar este comando para revertir el contenido de un archivo.

[[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

Además, podemos utilizar el git checkoutcomando para obtener un archivo eliminado del repositorio local. Supongamos que Tom elimina un archivo del repositorio local y queremos este archivo de vuelta. Podemos lograr esto usando el mismo comando.

[[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 está mostrando la letra Dantes del nombre del archivo. Esto indica que el archivo se ha eliminado del repositorio 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 - Podemos realizar todas estas operaciones antes de comprometernos.

Eliminar cambios del área de preparación

Hemos visto que cuando realizamos una operación de adición, los archivos se mueven del repositorio local al área de declaración. Si un usuario modifica accidentalmente un archivo y lo agrega al área de preparación, puede revertir sus cambios utilizando elgit checkout mando.

En Git, hay un puntero HEAD que siempre apunta a la última confirmación. Si desea deshacer un cambio del área preparada, puede usar el comando git checkout, pero con el comando checkout, debe proporcionar un parámetro adicional, es decir, el puntero HEAD. El parámetro de puntero de confirmación adicional indica al comando git checkout que restablezca el árbol de trabajo y también que elimine los cambios por etapas.

Supongamos que Tom modifica un archivo de su repositorio local. Si vemos el estado de este archivo, mostrará que el archivo se modificó pero no se agregó al área de preparación.

[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

El estado de Git muestra que el archivo está presente en el área de ensayo, ahora reviértalo usando el comando git checkout y vea el estado del archivo revertido.

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

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

Mover el puntero HEAD con Git Reset

Después de realizar algunos cambios, puede decidir eliminarlos. El comando de restablecimiento de Git se utiliza para restablecer o revertir cambios. Podemos realizar tres tipos diferentes de operaciones de reinicio.

El siguiente diagrama muestra la representación gráfica del comando de reinicio de Git.

Suave

Cada rama tiene un puntero HEAD, que apunta a la última confirmación. Si usamos el comando de restablecimiento de Git con la opción --soft seguida de la ID de confirmación, restablecerá el puntero HEAD solo sin destruir nada.

.git/refs/heads/masterEl archivo almacena el ID de confirmación del puntero HEAD. Podemos verificarlo usando elgit log -1 mando.

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

Ahora, vea la última ID de confirmación, que coincidirá con la ID de confirmación anterior.

[[email protected] project]$ git log -2

El comando anterior producirá el siguiente resultado.

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

Reiniciemos el puntero HEAD.

[[email protected] project]$ git reset --soft HEAD~

Ahora, simplemente restablecemos el puntero HEAD en una posición. Comprobemos el contenido de.git/refs/heads/master file.

[[email protected] project]$ cat .git/refs/heads/master
29af9d45947dc044e33d69b9141d8d2dad37cc62

El ID de confirmación del archivo ha cambiado, ahora verifíquelo viendo los mensajes de confirmación.

[email protected] project]$ git log -2

El comando anterior producirá el siguiente resultado.

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

mezclado

Git reset con la opción --mixed revierte los cambios del área de preparación que aún no se han confirmado. Revierte los cambios del área de preparación únicamente. Los cambios reales realizados en la copia de trabajo del archivo no se ven afectados. El restablecimiento de Git predeterminado es equivalente al restablecimiento de git: mixto.

difícil

Si usa la opción --hard con el comando de reinicio de Git, borrará el área de preparación; restablecerá el puntero HEAD a la última confirmación del ID de confirmación específico y también eliminará los cambios del archivo local.

Comprobemos el ID de confirmación.

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

[[email protected] src]$ git log -1

El comando anterior producirá el siguiente resultado.

commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 10:21:20 2013 +0530

Removed executable binary

Jerry modificó un archivo agregando un comentario de una sola línea al comienzo del archivo.

[[email protected] src]$ head -2 string_operations.c
/* This line be removed by git reset operation */
#include <stdio.h>

Lo verificó usando el comando git status.

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

Jerry agrega el archivo modificado al área de ensayo y lo verifica con el comando git status.

[[email protected] src]$ git add string_operations.c
[[email protected] src]$ git status

El comando anterior producirá el siguiente resultado.

# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#
modified: string_operations.c
#

El estado de Git muestra que el archivo está presente en el área de ensayo. Ahora, reinicie HEAD con - opción dura.

[[email protected] src]$ git reset --hard 577647211ed44fe2ae479427a0668a4f12ed71a1

HEAD is now at 5776472 Removed executable binary

El comando de restablecimiento de Git se realizó correctamente, lo que revertirá el archivo del área de prueba y eliminará cualquier cambio local realizado en el archivo.

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

El estado de Git muestra que el archivo se ha revertido desde el área de prueba.

[[email protected] src]$ head -2 string_operations.c
#include <stdio.h>

El comando principal también muestra que la operación de reinicio también eliminó los cambios locales.