untracked stash name files git git-branch git-stash git-reset

stash - Mueva el trabajo existente, no comprometido a una nueva sucursal en Git



git stash show (5)

Comencé a trabajar en una nueva característica y, después de codificar un poco, decidí que esta característica debería estar en su propia rama.

¿Cómo muevo los cambios no comprometidos existentes a una nueva rama y restablezco mi actual?

Quiero restablecer mi rama actual al mismo tiempo que conservo el trabajo existente en la nueva función.


Alternativamente:

  1. Guardar los cambios actuales en un alijo temporal:

    $ git stash

  2. Cree una nueva rama basada en este alijo, y cambie a la nueva rama:

    $ git stash branch <new-branch> stash@{0}

Consejo: use la tecla de tabulación para reducir la escritura del nombre de alijo.


El escenario común es el siguiente: Olvidé crear la nueva rama para la nueva función y estaba haciendo todo el trabajo en la rama de la característica anterior. He comprometido todo el trabajo "antiguo" a la rama maestra, y quiero que mi nueva rama crezca a partir de la "maestra". No he hecho un solo compromiso de mi nuevo trabajo. Aquí está la estructura de la rama: "master" -> "Old_feature"

git stash git checkout master git checkout -b "New_branch" git stash apply


Si lo confirma, también puede elegir el único ID de confirmación. Hago esto a menudo cuando comienzo a trabajar en master, y luego quiero crear una sucursal local antes de subir a mi origen /.

git cherry-pick <commitID>

Hay mucho que puede hacer con cherry-pick, como se describe here , pero esto podría ser un caso de uso para usted.


Usa lo siguiente:

git checkout -b <new-branch>

Esto dejará su sucursal actual tal como está, cree y compre una nueva sucursal y mantendrá todos sus cambios. A continuación, puede hacer un compromiso con:

git add <files>

y comprométete con tu nueva sucursal con:

git commit -m "<Brief description of this commit>"

Los cambios en el directorio de trabajo y los cambios en el índice no pertenecen todavía a ninguna rama. Esto cambia donde terminarían esos cambios.

No restableces tu rama original, permanece como está. La última confirmación en <old-branch> seguirá siendo la misma. Por lo tanto, checkout -b y luego confirma.


Si ha estado realizando confirmaciones en su rama principal mientras codificó, pero ahora desea mover esas confirmaciones a una rama diferente:

  1. Copie su historial actual en una nueva rama, trayendo consigo cualquier cambio no confirmado también:

    git checkout -b <new-feature-branch>

  2. Ahora obligue a la rama "desordenada" original a retroceder: (sin cambiarla)

    git branch -f <previous-branch> <earlier-commit-id>

    Por ejemplo:

    git branch -f master origin/master

    O si hubieras hecho 4 confirmaciones:

    git branch -f master HEAD~4

Advertencia: parece que git branch -f master origin/master restablecerá la información de seguimiento para esa rama. Entonces, si ha configurado su rama master para enviar a un lugar que no sea origin/master , esa configuración se perderá.

Una alternativa es utilizar esta técnica de reinicio . Pero esas instrucciones descartarán cualquier cambio no confirmado que tengas. Si desea guardarlos, guárdelos primero y deséchelos al final.