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 mergetoolo 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 addprimero.fuente
git stash apply --forceo algo.git add .,git stash applyluegogit resetaplicar el alijo a mis cambios de trabajo y fusionarme sin tener que hacer commits.Correr
git stash popogit stash applyes 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 rebasesi 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 -pmostrará el parche del último alijo guardado.git applylo aplicará Una vez realizada la fusión, se puede soltar el alijo fusionadogit stash drop.fuente
git stash popno 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 -pcrea 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 -pserá fusionado porgit apply, si es posible hacerlo sin conflictos.La forma en que hago esto es a
git addesto 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 defileserá 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