Hice algunos cambios en mi sucursal y me di cuenta de que olvidé haber escondido algunos otros cambios necesarios en dicha sucursal. Lo que quiero es una forma de fusionar mis cambios escondidos con los cambios actuales.
¿Hay alguna forma de hacer esto?
Es más por conveniencia, finalmente me di por vencido y cometí primero mis cambios actuales, luego mis cambios escondidos, pero hubiera preferido incorporarlos de una sola vez.
Respuestas:
Acabo de descubrir que si sus cambios no comprometidos se agregan al índice (es decir, "en etapas", usando
git add ...
), entoncesgit stash apply
(y, presumiblemente,git stash pop
) realmente se fusionará correctamente. Si no hay conflictos, eres de oro. De lo contrario, resuélvalos como de costumbregit mergetool
o manualmente con un editor.Para ser claros, este es el proceso del que estoy hablando:
... que es probablemente lo que estás buscando.
tl; dr
Corre
git add
primero.fuente
git stash apply --force
o algo.git add .
,git stash apply
luegogit reset
aplicar el alijo a mis cambios de trabajo y fusionarme sin tener que hacer commits.Correr
git stash pop
ogit stash apply
es esencialmente una fusión. No debería haber necesitado confirmar sus cambios actuales a menos que los archivos modificados en el alijo también se modifiquen en la copia de trabajo, en cuyo caso habría visto este mensaje de error:En ese caso, no puede aplicar el alijo a sus cambios actuales en un solo paso. Puede confirmar los cambios, aplicar el alijo, confirmar de nuevo y aplastar esos dos compromisos
git rebase
si realmente no desea dos compromisos, pero eso puede ser más problema de lo que vale.fuente
git commit --amend
.Aquí hay otra opción para hacerlo:
git stash show -p
mostrará el parche del último alijo guardado.git apply
lo aplicará Una vez realizada la fusión, se puede soltar el alijo fusionadogit stash drop
.fuente
git stash pop
no solo hace esto en casos donde la fusión se aplica limpiamente ...git stash show -p --no-color | git apply --3way
(--3way
= recurrir a la fusión de 3 vías si falla el parche).git stash show -p
crea una diferencia entre el contenido oculto y la confirmación cuando se creó por primera vez la entrada oculta . Por lo tanto, esto sobrescribiría los cambios en el archivo de trabajo que realizó el OP.git stash show -p
será fusionado porgit apply
, si es posible hacerlo sin conflictos.La forma en que hago esto es a
git add
esto primerogit stash apply <stash code>
. Es la forma más simple.fuente
Según lo sugerido por @Brandan, esto es lo que necesitaba hacer para desplazarme
Sigue este proceso:
Y se quedará con cambios locales totalmente fusionados para
file
, listo para hacer más trabajo / limpieza o hacer una buena confirmación. O, si sabe que el contenido combinado defile
será correcto, podría escribir un mensaje apropiado y omitirlogit reset HEAD^
.fuente
Puede ser, no es la peor idea fusionarse (a través de difftool) de ... sí ... ¡una rama!
fuente
tu puedes fácilmente
fuente
Otra opción es hacer otro "git stash" de los cambios locales no comprometidos, luego combinar los dos git stashes. Desafortunadamente, git parece no tener una manera de combinar fácilmente dos escondites. Entonces, una opción es crear dos archivos .diff y aplicarlos a ambos, por lo menos no es una confirmación adicional y no implica un proceso de diez pasos: |
Cómo: https://stackoverflow.com/a/9658688/32453
fuente