¿Cómo deshacer solo ciertos archivos?
Guardé mis cambios. Ahora quiero eliminar solo algunos archivos del alijo. ¿Cómo puedo hacer esto?
Como se menciona a continuación , y se detalla en "¿ Cómo puedo extraer un solo archivo (o cambios en un archivo) de un alijo de git? ", puede aplicar el uso git checkout
o git show
restaurar un archivo específico.
git checkout stash@{0} -- <filename>
Con Git 2.23+ (agosto de 2019), use git restore
, que reemplaza el comando confusogit checkout
:
git restore --source=stash@{0} -- <filename>
Eso sobrescribe filename
: asegúrese de no haber realizado modificaciones locales, o tal vez desee fusionar el archivo escondido .
(Como comentó Jaime M. , para ciertos shells como tcsh donde es necesario escapar de los caracteres especiales, la sintaxis sería git checkout 'stash@{0}' -- <filename>
:)
o para guardarlo con otro nombre de archivo:
git show stash@{0}:<full filename> > <newfile>
(tenga en cuenta que aquí
<full filename>
está la ruta completa de un archivo relativa al directorio superior de un proyecto (piense: relativa astash@{0}
)).
yucer sugiere en los comentarios :
Si desea seleccionar manualmente qué cambios desea aplicar desde ese archivo:
git difftool stash@{0}..HEAD -- <filename>
# or
git checkout -p stash@{0} -- <filename>
Vivek agrega en los comentarios :
Parece que "
git checkout stash@{0} -- <filename>
" restaura la versión del archivo en el momento en que se realizó el almacenamiento oculto; NO aplica (solo) los cambios almacenados para ese archivo.
Para hacer esto último:
git diff stash@{0}^1 stash@{0} -- <filename> | git apply
(como lo comentó peterflynn , en algunos casos es posible que necesite eliminar una barra diagonal inicial () de las rutas de diferenciación tradicionales)| git apply -p1
p1
Como se comentó: "unstash" ( git stash pop
), entonces:
- agregue lo que desea conservar al índice (
git add
) - guarda el resto:
git stash --keep-index
El último punto es lo que le permite conservar algunos archivos mientras esconde otros.
Se ilustra en " Cómo ocultar solo un archivo entre varios archivos que han cambiado ".
git checkout stash@{N} <File(s)/Folder(s) path>
P.ej. Para restaurar solo el archivo ./test.c y la carpeta ./include desde la última vez que se guardaron,
git checkout stash@{0} ./test.c ./include
Creo que la respuesta de VonC es probablemente lo que quieres, pero aquí tienes una forma de hacer una "aplicación de git" selectiva:
git show stash@{0}:MyFile.txt > MyFile.txt