name - ¿Es git stash rama específica o para todo el repositorio?
git stash stack overflow (3)
Entré en una sucursal e hice algo de trabajo. Quería ir a otra sucursal pero no quería comprometerme, así que lo hice. Luego hice git checkout <otherbranch>
. Trabajé allí y, al igual que en la primera sucursal, quise cambiarme antes de comprometer el trabajo. Así que también git stash
allí. Volví a la primera rama e intenté destrabarla ( git stash pop
) pensando que obtendría el escondite de esa rama específica. Me sorprendió que desvelara el alijo de <otherbranch>
(último escondido). Tenía la impresión de que el escondite es específico de una sucursal, pero este comportamiento indica que solo hay un escondite para todo el repositorio local.
¿Es git stash
rama específica o para todo el repositorio? Si es para todo el repositorio, ¿puedo pasarle opciones para que sea específico de una rama?
No y No. git stash es por repositorio.
Here hay una buena página sobre cómo usarlo.
Para ver la pila actual de alijo:
git stash list
Para elegir un alijo específico de la pila, consulte el stash@{ number }
muestra arriba.
Si desea que el comportamiento sea por rama, puede hacer una confirmación (o varias confirmaciones) en la rama. Siempre puede "deshacer" la (s) confirmación (es) más tarde (por ejemplo, con git reset
, ya sea --soft
o --mixed
; consulte la documentación de git reset ; o con git rebase -i
para mantener solo la eventual confirmación "real" ( s) mientras descarta los temporales).
(Para emular realmente el git stash
, necesitas al menos dos confirmaciones, una para el estado del índice y otra para el estado del árbol de trabajo. Sin embargo, si no estás planeando guardar y restaurar el estado del índice, simplemente puedes git add -A
todo el estado del árbol de trabajo y ponerlo en la confirmación temporal. Alternativamente, git stash
es un script de shell para que pueda copiarlo y modificarlo con bastante facilidad para que funcione por rama de forma predeterminada, usando, por ejemplo, refs/pb-stash/ branch
como su nombre-espacio de trabajo, en lugar de un único refs/stash
global para todo el repositorio. Todavía sería capaz de traer un escondite de una rama a otra nombrándolo explícitamente).
git stash
no es por rama.
- En lugar de
git stash
(que se puede perder fácilmente cuando tienes muchos escondites y ramas) - Te sugiero que hagas un
git commit
para guardar el código sin terminar en tu sucursal y cuando estés listo para terminar el código haz ungit 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ífica
Aquí hay un escenario común de la vida real que demuestra el valor y el uso de los comandos commit
y reset
:
- usted está trabajando en la rama de características X y su código ni siquiera compila o pasa las pruebas
- hay un error que es de mayor prioridad que la nueva característica actual y, por lo tanto, debe comenzar a trabajar inmediatamente en la corrección de errores
- en lugar de hacer un alijo de git (y el alijo se pierde en la mezcla porque tienes muchos escondites y muchas ramas)
- puedes hacer un
git commit
en la rama de características X- escriba
COMMIT_HASH_VALUE
para más tarde
- escriba
- checkout una nueva rama Y para el hot fix
- finalice la corrección urgente en la rama Y (realice una solicitud de combinación para obtener la corrección urgente en la línea de base y elimine la rama de revisión urgente)
- luego revisa la rama de características X nuevamente
- para mostrar su trabajo sin terminar que no compiló o pasó las pruebas -> simplemente haga un
git reset ${COMMIT_HASH_VALUE}
(FYI el valor predeterminado para el git reset
es --mixed
)