Gastón Ramos
Blog personal
Deshacer cambios en Git
Escrito en dos mañanas del 29 y 30 de Septiembre de 2024La idea
La idea de este post es hacer un repaso de las 3 formas básicas para deshacer cambios en git, diría que son cosas muy necesarias en el día a día, así que ahí vamos!
1. Como cambiar el último commit: ( git commit --amend )
Si acabamos de hacer un commit y nos damos cuenta de que por ejemplo nos olvidamos
de agregar un archivo, o que queremos mejorar/cambiar el mensaje de commit, podemos "cambiar" el último
commit con "git commit --amend"
Entonces supongamos que hicimos, esto:
> git add my_file_A.rb > git commit -m "Adding some new files" [master (root-commit) c798093] Add my files 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 my_file_A.rb
Ahora nos damos cuenta de que nos olvidamos de agregar un archivo my_file_B.rb en nuestro último commit, y queremos agregarlo, entonces podemos hacer esto:
> git add my_file_B.rb > git commit --amend
Y entonces vamos a ver que se abre nuestro editor configurado por defecto, y el mensaje de commit es el último, el cuál podemos modificar y además ahora también está nuestro archivo olvidado "my_file_B"
Adding some new files # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # Date: Fri Sep 27 12:19:31 2024 -0300 # # On branch master # # Initial commit # # Changes to be committed: # new file: my_file_A.rb # new file: my_file_B.rb
Guardamos y salimos, y listo. Debemos tener en cuenta, que esto nos cambia el commit, y por consiguiente va a cambiar el commit hash. En síntesis, este comando nos permite cambiar el commit más reciente reemplazándolo por completo.
2. Sacar un archivo de la zona de Stage: ( git restore --staged <file> )
Lo siguiente es para el caso en el que hayamos agregado un archivo modificado para ser enviado en el siguiente commit, es decir un archivo confirmado. Vamos a suponer que hicimos esto:
Modificamos los archivos:
> echo "hi" >> my_file_A.rb > echo "hi-B" >> my_file_B.rb > git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: my_file_A.rb modified: my_file_B.rb no changes added to commit (use "git add" and/or "git commit -a")
Entonces ahora agregamos los dos archivos para luego commitearlos
> git add my_file_A.rb my_file_B.rb > git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: my_file_A.rb modified: my_file_B.rb
Pero en este puntos nos damos cuenta que queremos hacer 2 commits, uno por cada archivo, entonces lo primero que necesitamos hacer es sacar my_file_B.rb, y lo hacemos de la siguiente manera:
> git restore --staged my_file_B.rb > git status On branch master Changes to be committed: (use "git restore --staged..." to unstage) modified: my_file_A.rb Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: my_file_B.rb
Ahora podemos comitear my_file_A.rb,que está confirmado, y luego agregar (con git add) y comitear my_file_B.rb
3. Revertir los cambios en un archivo: ( git restore <file> )
Si nos vemos en el caso de que cambiamos un archivos, pero no queremos mantener esos cambios, git nos permite revertirlos y volver el archivo a la versión del último commit de nuestro working directory, hay que tener cuidado por que cualquier cambio que hayamos hecho en el archivo se va a perder. Por ejemplo ahora vamos a modificar el archivo file_A.rb para luego hacer un restore
> echo "hi, me again" >> my_file_A.rb > git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: my_file_A.rb no changes added to commit (use "git add" and/or "git commit -a") > git restore file_A.rb > git status On branch master nothing to commit, working tree clean
Bueno esto fué todo, escribí este artículo más para mí, por que siempre es bueno volver a repasar las cosas fundamentales, espero que te sea útil. Gracias por leerme. Gramos ;)