Guardar solo un archivo

174

Me gustaría poder guardar solo los cambios de un solo archivo:

git stash save -- just_my_file.txt

Sin embargo, lo anterior no funciona. Alguna alternativa?

EoghanM
fuente
para un solo archivo, en lugar de hacer malabares con los comandos de ocultación, un enfoque mucho más fácil es copiar un solo archivo y cuando desee recuperarlo, simplemente copie sobre el original. p.ej. cp just_my_file.txt just_my_file.txt.manualstash ahora puede hacer todos los pagos y otras cosas, y como la copia es un "archivo sin seguimiento", puede moverse a través de sucursales y confirmaciones sin ningún problema. Cuando esté en la rama / confirmación correcta donde desea "fusionar el archivo único ", simplemente haga mv just_my_file.txt.manualstash just_my_file.txty ahora puede revisar los cambios y confirmarlos cuando sea necesario
Dimitry K

Respuestas:

173

Yo creo que stash -p es probablemente la opción que desea, pero en caso de que se encuentre con otras cosas aún más difíciles en el futuro, recuerde que:

Stashes realmente una alternativa muy simple a los conjuntos un poco más complejos branch. Stash es muy útil para mover cosas rápidamente, pero puedes lograr cosas más complejas con ramas sin mucho más dolor de cabeza y trabajo.

# git checkout -b tmpbranch
# git add the_file
# git commit -m "stashing the_file"
# git checkout master

ve y haz lo que quieras, y luego simplemente rebasey / o mergeel tmpbranch. Realmente no es que mucho trabajo extra cuando lo que necesita hacer un seguimiento más cuidadoso que permitirá alijo.

Wes Hardaker
fuente
2
Por el lado positivo, puede convertir los escondites en ramas reales sin un gran dolor.
Wes Hardaker
87

Si no desea especificar un mensaje con sus cambios escondidos, pase el nombre del archivo después de un doble guión.

$ git stash -- filename.ext

Si se trata de un archivo nuevo / sin seguimiento, primero deberá organizarlo.

Sin embargo, si no desea especificar un mensaje, el uso push.

git stash push -m "describe changes to filename.ext" filename.ext

Ambos métodos funcionan en git versiones 2.13+

sealocal
fuente
1
Esta respuesta parece el más sencillo para mí cuando la toma de enmendar cambios: git stash -- filename.ext, git commit --amend, git stash pop
Brandon Dewey
1
Creo que esto debe basarse en una funcionalidad muy nueva. No funciona en git 2.1.4.
Richard Smith
Es el resultado de un comportamiento extraño para mí, con el alijo de ser salvado, pero los mismos archivos que se añade a la puesta en escena al mismo tiempo (v2.20.1 GIT),
Paradroid
58

Puede esconder interactivamente líneas individuales con git stash -p(análogo a git add -p).

No toma un nombre de archivo, pero puede omitir otros archivos dhasta llegar al archivo que desea guardar y guardar todos los cambios allí a.

Benjamin Bannier
fuente
3
Esto lleva mucho tiempo si tiene muchos archivos que no desea guardar.
jjj
23
no sé cuándo cambió esto, pero a partir de git 2.14.1usted puede especificar el nombre del archivogit stash -p <filename>
muon
21

La mejor opción es organizar todo menos este archivo, y decirle a stash que mantenga el índice git stash save --keep-index, ocultando así su archivo no organizado:

$ git add .
$ git reset thefiletostash
$ git stash save --keep-index

Como señala Dan, thefiletostashes el único que se restablece con el alijo, pero también oculta los otros archivos, por lo que no es exactamente lo que desea.

CharlesB
fuente
2
Aunque esto mantiene el índice en el mismo estado, ¿no oculta también los archivos que están en el índice? En otras palabras, si después de hacer esto, confirma el índice en la rama actual, luego cambia a otra rama y git stash pop, ¿no va a aplicar todos los archivos, no solo el único archivo que queríamos guardar?
Dan Moulding
@DanMoulding: tienes toda la razón, no he pensado en esto.
CharlesB
16

En caso de que realmente quiera decir 'descartar cambios' siempre que use 'git stash' (y realmente no use git stash para esconderlo temporalmente), en ese caso puede usar

git checkout -- <file>

Tenga en cuenta que git stash es solo una alternativa más rápida y sencilla a ramificar y hacer cosas.

Devesh
fuente
Creo que esta es la mejor respuesta si desea eliminar todos los cambios modificados en un solo archivo.
Mohamed Haseel
y me gustaría que esta sea la mejor respuesta para esa tarea en particular
Zakir hussain el
66
La pregunta era lo suficientemente clara y no preguntaba cómo revertir los cambios en un archivo. Voto negativo
Richard Smith
Esta es una buena respuesta, que se muestra claramente como una alternativa. Pero algunas personas serán lo suficientemente tercas como para usar el voto negativo como característica abusiva: +1
Mukul Jain
@MukulJain En realidad, necesitaba usar el alijo por archivo de una manera muy temporal (básicamente separando algunos cambios en dos confirmaciones que afectaron las mismas líneas, para un archivo). Realmente no votaré en contra, solo declararé que es inútil para mí.
Paul Stelian