¿Cómo deshacer solo ciertos archivos?

Resuelto morpheus asked hace 11 años • 10 respuestas

Guardé mis cambios. Ahora quiero eliminar solo algunos archivos del alijo. ¿Cómo puedo hacer esto?

morpheus avatar Mar 07 '13 13:03 morpheus
Aceptado

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 checkouto git showrestaurar 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 a stash@{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 -p1p1


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 ".

VonC avatar Mar 07 '2013 06:03 VonC
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
Balamurugan A avatar Mar 21 '2014 09:03 Balamurugan A

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
Mike Monkiewicz avatar Mar 07 '2013 16:03 Mike Monkiewicz