Cómo unstash solo ciertos archivos?
He guardado mis cambios. Ahora quiero unstash solo algunos archivos del alijo. ¿Cómo puedo hacer esto?
6 answers
Como se menciona a continuación, y se detalla en " ¿Cómo extraería un solo archivo (o cambios a un archivo) de un alijo de git?", puede aplicar uso git checkout
o git show
para restaurar un archivo específico.
git checkout stash@{0} -- <filename>
(Como comentó por Jaime M., para ciertos shell como tcsh donde necesita escapar de los caracteres especiales, la sintaxis sería: git checkout 'stash@{0}' -- <filename>
)
O para guardarlo bajo otro nombre de archivo:
git show stash@{0}:<full filename> > <newfile>
(tenga en cuenta que aquí
<full filename>
es el nombre de ruta completo de un archivo relativo al directorio superior de un proyecto (piense: relativo astash@{0}
)).
Yucer sugiere en los comentarios:
Si desea seleccionar manualmente los cambios que desea aplicar desde ese archivo:
git difftool stash@{0}..HEAD -- <filename>
Vivek agrega en los comentarios:
Parece que "
git checkout stash@{0} -- <filename>
" restaura la versión del archivo a partir del momento en que se realizó el alijo -- hace NO aplicar (solo) los cambios guardados para ese archivo.
Para hacer esto último:
git diff stash@{0}^1 stash@{0} -- <filename> | git apply
(como comentó por peterflynn , es posible que necesite | git apply -p1
en algunos casos, eliminar una barra diagonal (p1
) de las rutas de diferencias tradicionales)
Como se comentó: "unstash "(git stash pop
), entonces:
- agregue lo que desea mantener al índice (
git add
) - guarda el resto:
git stash --keep-index
El último punto es lo que permite que guardes algún archivo mientras escondes otros.
Es ilustrado en "Cómo guardar un archivo de varios archivos que han cambiado".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-13 14:21:11
git checkout stash@{N} <File(s)/Folder(s) path>
Eg. Para restaurar solamente ./prueba.c archivo y ./ incluir carpeta del último guardado,
git checkout stash@{0} ./test.c ./include
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-12 18:44:47
Creo que la respuesta de VonC es probablemente lo que quieres, pero aquí hay una manera de hacer un "git apply" selectivo:
git show stash@{0}:MyFile.txt > MyFile.txt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-08 03:45:33
Si git stash pop
(sin conflictos) eliminará el alijo después de que se aplique. Pero si git stash apply
se aplicará el parche sin eliminarlo de la lista de alijos. Luego puede revertir los cambios no deseados con git checkout -- files...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-07 06:44:15
Primero listar todos los alijos
git stash list
↓
stash@{0}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{1}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{2}: WIP on master: 7e450c81 Merge branch 'Offlineseite'
Luego muestra qué archivos están en el alijo:
git stash show stash@{1} --name-only
↓
ajax/product.php
ajax/productPrice.php
errors/Company/js/offlineMain.phtml
errors/Company/mage.php
errors/Company/page.phtml
js/konfigurator/konfigurator.js
Luego aplica el archivo que quieras:
git checkout stash@{1} -- <filename>
O carpeta completa:
git checkout stash@{1} /errors
También funciona sin --
pero se recomienda usarlos. Ver este post.
También es convencional reconocer un doble guion como una señal para detener la interpretación de la opción y tratar todos los siguientes argumentos literalmente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-04 11:01:37
Una manera más:
git diff stash@{N}^! -- path/to/file1 path/to/file2 | git apply -R
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-16 12:12:17