Entré en una sucursal e hice algunos trabajos. Quería ir a otra rama pero no quería comprometerme, así que lo hice git stash
. Entonces lo hice git checkout <otherbranch>
. Hice un trabajo allí y, al igual que en la primera rama, quería cambiar antes de realizar el trabajo. Así que yo también lo hice git stash
allí. Volví a la primera rama y traté de deshacerla ( git stash pop
) pensando que obtendría el alijo de esa rama específica. Me sorprendió que sacara el alijo de <otherbranch>
(último escondido). Tenía la impresión de que el alijo es específico de la rama, pero este comportamiento indica que solo hay un alijo para todo el repositorio local.
¿Es git stash
específico de la rama o para todo el repositorio? Si es para todo el repositorio, ¿puedo pasarle opciones para que sea específico de la rama?
stash list
elemento además de una descripción?git stash show
(ogit stash show stash@{<number>}
para algo diferente a la@{0}
versión) le da undiff --stat
; agregue-p
para obtener una diferencia mayor. Nota: esto compara el "árbol de trabajo" en la "bolsa de alijo" con el compromiso del que cuelga; no hay una interfaz frontal para ver qué hay en el "índice" en la bolsa de almacenamiento dada.No y No. git stash es por repositorio.
Aquí hay una buena página sobre cómo usarlo.
fuente
git stash
no es por rama.git stash
(que se puede perder fácilmente cuando tienes muchos escondites y ramas)git commit
para guardar el código sin terminar en su rama y cuando esté listo para terminar el código, haga unagit reset ${COMMIT_HASH_VALUE}
para recuperar el código sin terminar.git commit
ygit reset
cuando se usan juntos correctamente pueden simular ungit stash
para una rama específicaA continuación, se muestra un escenario común de la vida real que demuestra el valor y el uso de los comandos
commit
yreset
:git commit
función en la rama XCOMMIT_HASH_VALUE
para más tardegit reset ${COMMIT_HASH_VALUE}
(Para su información, el valor predeterminado
git reset
es--mixed
)fuente
git reset HEAD~1
.HEAD^1
oHEAD~1
.No estoy seguro de por qué todas las respuestas aquí sugieren emular el alijo con
commit
+reset
. Stash está perfectamente bien de usar, especialmente cuando se trabaja en varias ramas. Tampoco quiero comprometerme cuando trabajo en varias ramas, porque quiero que todos los cambios modificados estén resaltados en mi editor cuando regrese.Así que aquí está el flujo de trabajo de alijo:
Siempre que tenga que cambiar de rama y no esté listo para comprometerse, guarde sus cambios en la pila
Cuando regrese a una sucursal, revise el alijo
Si está en la rama
FixIssue0203
, podría usar el usogit stash pop
porque esto aplicará la parte superiorstash@{0}
y la eliminará del escondite.Sin embargo, si está en la rama
ImproveReadme
, primero debe aplicar el alijo 1git stash apply stash@{1}
y luego quitar el alijo 1 de la pilagit stash drop stash@{1}
.¡Eso es!
fuente