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.
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.
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.
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:
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.
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.
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í.
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 hagamv just_my_file.txt.manualstash just_my_file.txt
y ahora puede revisar los cambios y confirmarlos cuando sea necesarioRespuestas:
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:Stash
es realmente una alternativa muy simple a los conjuntos un poco más complejosbranch
. 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.ve y haz lo que quieras, y luego simplemente
rebase
y / omerge
el tmpbranch. Realmente no es que mucho trabajo extra cuando lo que necesita hacer un seguimiento más cuidadoso que permitirá alijo.fuente
Si no desea especificar un mensaje con sus cambios escondidos, pase el nombre del archivo después de un doble guión.
Si se trata de un archivo nuevo / sin seguimiento, primero deberá organizarlo.
Sin embargo, si no desea especificar un mensaje, el uso
push
.Ambos métodos funcionan en git versiones 2.13+
fuente
git stash -- filename.ext
,git commit --amend
,git stash pop
Puede esconder interactivamente líneas individuales con
git stash -p
(análogo agit 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.
fuente
git 2.14.1
usted puede especificar el nombre del archivogit stash -p <filename>
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:Como señala Dan,
thefiletostash
es el único que se restablece con el alijo, pero también oculta los otros archivos, por lo que no es exactamente lo que desea.fuente
git stash pop
, ¿no va a aplicar todos los archivos, no solo el único archivo que queríamos guardar?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
Tenga en cuenta que git stash es solo una alternativa más rápida y sencilla a ramificar y hacer cosas.
fuente