Las otras respuestas que sugieren que revisar la otra rama y luego comprometerse con ella solo funcionan si la verificación es posible debido a las modificaciones locales. Si no es así, estás en el caso de uso más común para git stash
:
git stash
git checkout other-branch
git stash pop
La primera stash
esconde sus cambios (básicamente haciendo cometer un temporal), y la posterior stash pop
les vuelve a aplicar. Esto le permite a Git usar sus capacidades de fusión.
Si cuando intenta abrir el alijo, se encuentra con conflictos de combinación ... los próximos pasos dependen de cuáles sean esos conflictos. Si todos los cambios ocultos pertenecen a esa otra rama, simplemente tendrá que ordenarlos a través de ellos, es una consecuencia de haber realizado los cambios en la rama incorrecta.
Por otro lado, si realmente ha cometido un error, y su árbol de trabajo tiene una combinación de cambios para las dos ramas, y los conflictos están justo en los que desea confirmar en la rama original, usted puede ahorrar algo de trabajo Como de costumbre, hay muchas maneras de hacer esto. Aquí hay uno, a partir de después de que el pop y ver los conflictos:
# Unstage everything (warning: this leaves files with conflicts in your tree)
git reset
# Add the things you *do* want to commit here
git add -p # or maybe git add -i
git commit
# The stash still exists; pop only throws it away if it applied cleanly
git checkout original-branch
git stash pop
# Add the changes meant for this branch
git add -p
git commit
# And throw away the rest
git reset --hard
Alternativamente, si se da cuenta antes de la hora de que esto va a suceder, simplemente cometer las cosas que pertenecen a la rama actual. Siempre se puede volver y modificar que se comprometan:
git add -p
git commit
git stash
git checkout other-branch
git stash pop
Y, por supuesto, recordar que todo esto tomó un poco de trabajo, y evitar que la próxima vez, tal vez poniendo el nombre de la rama actual en su pronta añadiendo $(__git_ps1)
a tu PS1 en tu bashrc. (Consulte, por ejemplo, los documentos Git in Bash)
Cuando dijiste: 'Revisar la sucursal y luego comprometerse solo funcionaría si el pago fuera posible dadas las modificaciones locales'. ¿Qué quieres decir? ¿Te importaría dar/debatir un ejemplo simple cuando eso fallaría? –
@ user815423426 Si tiene cambios no confirmados, puede verificar otra rama si y solo si el conjunto de archivos que ha cambiado y el conjunto de archivos que difieren entre las dos ramas son disjuntos. Es decir, si ha modificado el archivo A, puede consultar otra rama solo si el archivo A es el mismo en ambas ramas. – Cascabel
¡Gracias! Cuando dijiste que 'A' es el mismo en ambas ramas, te refieres a 'A' antes de mis cambios (es decir, 'A' en la CABEZA de cada rama). ¿Correcto? –