¿Cómo puedo guardar un archivo específico?
¿Cómo puedo guardar un archivo específico y dejar los demás actualmente modificados fuera del archivo que estoy a punto de guardar?
Por ejemplo, si git status me da esto:
younker % gst
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: app/controllers/cart_controller.php
# modified: app/views/cart/welcome.thtml
#
no changes added to commit (use "git add" and/or "git commit -a")
y solo quiero guardar app/views/cart/welcome.thtml, ¿cómo haría eso? Algo como (pero por supuesto esto no funciona):
git stash save welcome_cart app/views/cart/welcome.thtml
EDITAR: Desde git 2.13, hay un comando para guardar una ruta específica al alijo: git stash push <path>
. Por ejemplo:
git stash push -m welcome_cart app/views/cart/welcome.thtml
ANTIGUA RESPUESTA:
Puedes hacerlo usando git stash --patch
(o git stash -p
): ingresarás al modo interactivo donde se te presentará cada fragmento que se modificó. Úselo n
para omitir los archivos que no desea guardar, y
cuando encuentre el que desea guardar, y q
para salir y dejar los archivos restantes sin guardar. a
guardará el trozo mostrado y el resto de los trozos en ese archivo.
No es el enfoque más fácil de usar, pero hace el trabajo si realmente lo necesita.
Por lo general, agrego al índice los cambios que no quiero guardar y luego los guardo con --keep-index
la opción.
git add app/controllers/cart_controller.php
git stash --keep-index
git reset
El último paso es opcional, pero normalmente lo deseas. Elimina cambios del índice.
Advertencia
Como se indica en los comentarios, git stash --keep-index
coloca todo en el alijo, tanto en preparación como en preparación. Simplemente --keep-index
deja el índice en paz una vez que el alijo está listo. Esto puede causar conflictos de fusión cuando luego extraigas el alijo.
Para guardar un archivo:
git stash -- filename.txt
Para dar un mensaje en el comando en lugar de ingresarlo cuando se le solicite, agregue -m antes de la parte del archivo, por ejemplogit stash -m "stash-message" -- filename1.txt
Para guardar más de un archivo:
git stash -m "stash-message" -- filename1.txt filename2.txt…