Respuestas:
Parece que todo lo que necesitas es lo siguiente:
git stash
git checkout branch123
git stash apply
Entonces deberías estar de vuelta en tu propia rama sin tocar la rama maestra.
stash
guarda las modificaciones locales y luego stash apply
las recupera.
git reset --hard HEAD
y estás de vuelta a la última confirmación que hiciste a tu rama maestra.
La respuesta aceptada es la más completa, pero hay un caso especial en el que puede simplificar. Si los archivos que ha modificado en el directorio de trabajo son idénticos en ambos master
y branch123
simplemente puede hacer
git checkout branch123
No es necesario guardar nada, ya que el comportamiento predeterminado de checkout
NO es sobrescribir los archivos modificados en su directorio de trabajo, por lo que no perderá nada. (Esto fue mencionado en los comentarios primero por Cascabel)
Como otras personas han mencionado en los comentarios, si branch123
aún no existe, puede hacer
git checkout -b branch123
Basado en lo que encontré aquí .
git checkout -b newbranch
master
y branch123
. Ver mi respuesta editada.
git stash
es lo que necesitas
Una explicación completa se puede encontrar en Git-Tools-Stashing
Como es posible crear una nueva rama pero no es posible pagar una rama existente mientras se extraen los archivos, encontré el siguiente truco usando una rama temporal para trabajar:
Este escenario funciona al menos con el complemento VS 2015 Git, pero lo más probable es que funcione con cualquier herramienta git.
EDITAR: descubrí que tendrá que realizar un rebase (git rebase --onto) de la rama temporal antes de realizar la fusión. De lo contrario, los cambios en master se incluirán en la fusión. Un paso adicional 3.5 arriba. Ver más sobre rebase aquí: https://git-scm.com/book/en/v2/Git-Branching-Rebasing