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

Comencé a trabajar en una nueva función y, después de codificar un poco, decidí que esta función debería estar en una rama separada.

¿Cómo transferir los cambios no confirmados existentes a una nueva sucursal y restablecer la actual?

Quiero restablecer mi rama actual, mientras mantengo el trabajo existente en una nueva función.

2540
08 сент. fijado por Dane O'Connor 08 sep. 2009-09-08 18:57 '09 a las 18:57 2009-09-08 18:57
@ 5 respuestas

Usa lo siguiente:

 git checkout -b <new-branch> 

Esto dejará su rama actual tal como está, cree y verifique la nueva rama y guarde todos sus cambios. Entonces puedes cometer usando:

 git add <files> 

y enviar una nueva rama utilizando:

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

Los cambios en el directorio de trabajo y los cambios realizados en el índice aún no pertenecen a ninguna rama. Esto cambiará cuando estos cambios terminen.

No es necesario restablecer la rama de origen, permanece como está. La última confirmación para <old-branch> seguirá siendo la misma. Así que checkout -b y luego arreglas.

2999
08 сент. La respuesta se da en knittl 08 sep . 2009-09-08 18:59 '09 a las 18:59 2009-09-08 18:59

Alternativamente:

  • Guarda tus cambios de tempo actuales:

    $ git stash

  • Cree una nueva rama basada en este caché y cambie a una nueva rama:

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

border=0

Consejo Use la tecla de tabulación para reducir la entrada del nombre de la cartera.

257
19 июня '15 в 3:18 2015-06-19 03:18 Robin Qiu da la respuesta el 19 de junio de '15 a las 3:18 de 2015-06-19 03:18

Si realizó confirmaciones en su rama principal durante la codificación, pero ahora desea mover estas confirmaciones a otra rama:

  1. Copie el historial actual a un nuevo hilo, haciendo también cambios no confirmados:

     git checkout -b <new-feature-branch> 
  2. Ahora fuerce la rama sucia original para retroceder: (sin cambiarla)

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

    Por ejemplo:

     git branch -f master origin/master 

    O si hiciste 4 fijaciones:

     git branch -f master HEAD~4 

Advertencia Parece que git branch -f master origin/master restablecerá la información de seguimiento para esta rama. Por lo tanto, si configuró la rama master para empujarla en algún lugar, a excepción de origin/master esta configuración se perderá.

Una alternativa es utilizar esta técnica de reinicio . Pero estas instrucciones descartarán cualquier cambio no corregido que tengas. Si desea guardarlos, primero escúchelos y desbloquéelos al final.

37
12 февр. Respuesta dada por joeytwiddle el 12 de febrero. 2016-02-12 10:44 '16 a las 10:44 2016-02-12 10:44

Si lo hace, también puede seleccionar un widget para un solo compromiso. A menudo hago esto cuando comienzo a trabajar con un maestro, y luego quiero crear una rama local antes de elevar mi inicio /.

 git cherry-pick <commitID> 

Aquí puede hacer mucho con la ayuda de cherry-pick, como se describe aquí , pero esto puede ser un precedente para usted.

16
30 нояб. La respuesta se da contraseña 30 nov. 2015-11-30 23:58 '15 a las 11:58 pm 2015-11-30 23:58

El escenario general es el siguiente: Olvidé crear una nueva rama para la nueva función e hice todo el trabajo en la función de la antigua rama. He completado todo el trabajo "antiguo" en la rama maestra, y quiero que mi nueva rama evolucione desde la "maestra". No he hecho una sola fijación 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 
1
13 авг. respuesta dada por Alex Burov 13 ago. 2018-08-13 19:07 '18 a las 7:07 pm 2018-08-13 19:07

Otras preguntas sobre etiquetas o Haz una pregunta