Me gustaría hacer el siguiente flujo de trabajo:
- Agregar cambios al escenario.
- Guarda todos los demás cambios que no se organizaron.
- Haga algunas cosas con las cosas en el escenario (es decir, compilar, ejecutar pruebas, etc.)
- Aplica el alijo.
¿Hay alguna manera de hacer el paso 2?
Ejemplo
echo "123" > foo
git add foo # Assumes this is a git directory
echo "456" >> foo
git stash
cat foo # Should yield 123
man git stash
es mucho mejor.Respuestas:
git stash save
tiene una opción--keep-index
que hace exactamente lo que necesitas.Entonces, corre
git stash save --keep-index
.fuente
save
congit stash
. Tal vez es el programador en mí que insiste en honrar la simetría con apply / pop. :)git stash save
es que también deja los cambios ya organizados en su copia de trabajo. En el flujo de trabajo anterior, esto funcionaría bien ya que solo está aplicando el alijo encima de una copia local que ya tiene la mitad de los cambios del alijo (que git es lo suficientemente inteligente como para ignorarlo). Pero si edita el código antes de volver a aplicar el alijo, podría ver conflictos de fusión cuando vaya a aplicar. Fyi.git commit --ammend
si hay problemas en lo que cometí.--amend
(en lugar de--ammend
)Esto puede hacerse en 3 pasos: guardar los cambios por etapas, guardar todo lo demás, restaurar el índice con los cambios por etapas. Que es básicamente:
Esto hará exactamente lo que quieras.
fuente
-u
también guarda archivos sin seguimiento.git stash save --keep-index
hace con mucho más trabajo. No veo ninguna ventaja.Además, Re:
R: Porque siempre debe registrar el código probado :) Eso significa que debe ejecutar las pruebas solo con los cambios que está a punto de confirmar.
Todo esto, aparte del hecho de que, por supuesto, como programador experimentado, tienes la necesidad innata de probar y revisar solo esos cambios, solo una broma parcial
fuente
Con
git version 2.7.4
usted puede hacer:El
git
le pedirá que agregue o no sus cambios en el alijo.Y luego solo respondes
y
on
Puede restaurar el directorio de trabajo como siempre lo hace:
o, si desea mantener los cambios guardados en el alijo:
fuente
Al extender las respuestas anteriores, a veces tengo un conjunto complejo de cambios organizados, pero deseo realizar un cambio por separado primero. Por ejemplo, podría haber detectado un error o un código incorrecto que me gustaría corregir antes de mis cambios organizados. Una posible ruta a seguir es esta:
primero esconde todo, pero deja los cambios organizados intactos
ahora esconde los cambios organizados por separado también
hacer cambios para arreglar; y prueba; comprometerlos:
ahora restaure los cambios organizados previamente:
resuelva cualquier conflicto y tenga en cuenta que si hubo conflictos, git se aplicará pero no eliminará esa entrada de alijo superior.
(... Luego, confirme los cambios organizados y restaure el alijo de todos los demás cambios, y continúe ...)
fuente
Para agregar los archivos no escalonados (no agregados a commit) a stash, ejecute el siguiente comando:
Entonces puede confirmar los archivos almacenados. Después de eso, puede recuperar los últimos archivos escondidos con el comando:
fuente
Esconder solo el árbol de trabajo (cambios no organizados) en Git es más difícil de lo que debería ser. La respuesta aceptada oculta los cambios no organizados, pero también oculta los cambios organizados (y los deja también organizados), que rara vez es lo que desea.
Este alias funciona bien:
Confirma los cambios por etapas temporalmente, crea un alijo a partir de los cambios restantes (y permite que argumentos adicionales como
--include-untracked
y--message
se pasen como argumentos de alias), y luego restablece la confirmación temporal para recuperar los cambios por etapas.Es similar a la respuesta de @Simon Knapp , pero con algunas diferencias menores: se utiliza
--quiet
en las acciones temporales tomadas y acepta cualquier número de parámetros para el alijopush
, en lugar de codificarlo-m
, y se agrega--soft
al final restablecer para que el índice permanezca como comenzó.Para el problema opuesto de guardar solo los cambios por etapas (alias
stash-index
), vea esta respuesta .fuente
Otro consejo, relacionado con la pregunta:
Cuando guardas de manera efectiva tus cambios no organizados usando
es posible que desee enviar un mensaje al alijo, de modo que cuando lo haga
git stash list
, sea más obvio lo que ha guardado antes, especialmente si sigue esa operación de alijo con más salvamentos. Por ejemplo(aunque en realidad contiene todos los cambios como se indica en otras respuestas).
Por ejemplo, lo anterior podría ser seguido inmediatamente por:
Tenga cuidado, sin embargo, que no puede usar
para restaurar solo los cambios no organizados.
fuente
Git no tiene un comando que oculte solo tus cambios no organizados.
Sin embargo, Git te permite especificar qué archivos quieres guardar.
Si solo desea guardar cambios específicos en esos archivos, agregue la
--patch
opción.La
--include-untracked
opción le permite guardar archivos sin seguimiento.Ejecute
git help stash
(oman git-stash
) para obtener más información.Nota: Si sus cambios no organizados están bastante desorganizados, la respuesta de @ alesguzik probablemente sea más fácil.
fuente
La forma moderna de ese comando es
git stash push [--] [<pathspec>...]
, ya que Git 2.16+ (git stash save
está en desuso )Puede combinar eso con un formulario comodín, por ejemplo:
Pero eso no funciona bien con Git para Windows, hasta Git 2.22 (Q2 2019), vea el problema 2037 , considerando que
git stash
se ha vuelto a implementar en C (en lugar de un script de shell)Ver commit 7db9302 (11 mar 2019) por Thomas Gummerer (
tgummerer
) .Ver commit 1366c78 , commit 7b556aa (07 mar 2019) por Johannes Schindelin (
dscho
) .(Fusionada por Junio C Hamano -
gitster
- en commit 0ba1ba4 , 22 abr 2019)fuente
Utilizo un alias, que acepta una cadena para usar como mensaje en la entrada oculta.
Cual:
-u
o-a
),--soft
para mantenerlo en el índice).fuente