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:
Guardar los cambios actuales en un alijo temporal:
$ git stash
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:
Copie su historial actual en una nueva rama, trayendo consigo cualquier cambio no confirmado también:
git checkout -b <new-feature-branch>
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.