Git Eliminar cambios no confirmados

Stewart Nguyen 6 febrero 2022
  1. Use git checkout para eliminar cambios no confirmados en Git
  2. Use git reset para eliminar cambios no confirmados en Git
  3. Use git stash y git stash para eliminar cambios no confirmados en Git
Git Eliminar cambios no confirmados

Este artículo lo guiará sobre cómo deshacer los cambios no confirmados que hemos realizado en el repositorio local.

Cuando trabajamos con una función, primero podemos crear nuevos archivos, agregar cambios a los archivos existentes y luego eliminar algunos archivos. Eventualmente, nos damos cuenta de que todo está mal y necesitamos volver al commit anterior. ¿Qué debemos hacer?

$ echo 'Add new implementation' > feature.txt
$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ rm deprecated_feature.txt
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file.txt

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    deprecated_feature.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

Tenemos varias formas de lograrlo.

Use git checkout para eliminar cambios no confirmados en Git

Este comando revertirá los cambios no confirmados para los archivos rastreados. Los archivos rastreados son archivos que git conoce, generalmente después de haber sido agregados por git add

$ git checkout .
Updated 2 paths from the index
$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

nothing added to commit but untracked files present (use "git add" to track)

Tenga en cuenta que git checkout no funcionará si los archivos ya se han agregado al área de preparación a través de git add.

$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ git checkout file.txt
Updated 0 paths from the index
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

En el ejemplo anterior, los cambios en file.txt no se revierten porque este archivo está en el área de ensayo.

Use git reset para eliminar cambios no confirmados en Git

Para eliminar los cambios no confirmados en el área de preparación, debemos seguir los siguientes pasos.

  1. Quite el archivo del área de ensayo con git reset.
  2. Deshacer cambios usando git checkout.
$ git reset file.txt
Unstaged changes after reset:
M	file.txt
$ git checkout file.txt
Updated 1 path from the index
$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

nothing added to commit but untracked files present (use "git add" to track)

Otra forma de eliminar los cambios no confirmados usando git reset es con la opción --hard y los parámetros HEAD.

$ git reset --hard HEAD
HEAD is now at 1e087f5 Make some change to file.txt
$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

nothing added to commit but untracked files present (use "git add" to track)
  • La opción --hard especifica a Git para lanzar TODOS los cambios entre el estado actual y el commit en el último argumento. Por esa razón, este comando se considera peligroso y debe usarse después de ejecutar git status para verificar los archivos de trabajo.
  • Alias ​​HEAD para el último commit.

Use git stash y git stash para eliminar cambios no confirmados en Git

El inconveniente de git checkout y git reset es que no pudieron eliminar archivos sin seguimiento. feature.txt persiste después de ejecutar esos comandos.

Considere el primer ejemplo.

$ echo 'Add new implementation' > feature.txt
$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ rm deprecated_feature.txt
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file.txt

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    deprecated_feature.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

Para eliminar todos los cambios no confirmados, incluidos los archivos preparados, con seguimiento pero sin preparar y archivos sin seguimiento. Vamos a usar el enfoque prolijamente git stash.

git stash nos permite guardar los cambios pero no requiere un git commit; actúa como almacenamiento temporal para archivos no comprometidos.

Después de agregar cambios al almacenamiento temporal, le diremos a Git que descarte los que están almacenados. Por lo tanto, todos los cambios no confirmados desaparecerán.

$ git add .
$ git stash
Saved working directory and index state WIP on main: 16b9767 deprecated_feature.txt
$ git stash drop
Dropped refs/stash@{0} (aebeb2cbdcec917331f5793ef1238f5a525d29ec)
$ git status
On branch main
nothing to commit, working tree clean

En resumen, tenemos varios enfoques para eliminar los cambios no confirmados:

  1. git checkout solo es útil cuando los archivos no están en el área de preparación.
  2. git reset útil para los cambios que están en el área de preparación pero no pueden eliminar los cambios en los archivos sin seguimiento, requiere una combinación con git checkout.
  3. git reset --hard HEAD puede ser más corto que el anterior pero es potencialmente peligroso.
  4. git stash con git add . puede eliminar todo, incluidos los archivos sin seguimiento.

Artículo relacionado - Git Commit