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


Empecé a trabajar en una nueva función y después de codificar por un tiempo, decidí que esta característica debería estar en su propia rama.

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

Quiero restablecer mi rama actual mientras conserva el trabajo existente en la nueva característica.


2506
2017-09-08 15:57


origen


Respuestas:


Use lo siguiente:

git checkout -b <new-branch>

Esto dejará su sucursal actual tal como está, crear y pagar una nueva sucursal y conservar todos sus cambios. A continuación, puede realizar una confirmación con:

git add <files>

y comprométase con su nueva sucursal con:

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

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

Tu no Reiniciar su rama original, se queda como está. El último compromiso en <old-branch> seguirá siendo el mismo Por lo tanto tú checkout -b y luego cometer


2961
2017-09-08 15:59



Alternativamente:

  1. Guarde los cambios actuales en un alijo temporal:

    $ git stash

  2. Crea una nueva rama basada en este alijo y cambia a la nueva rama:

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

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


253
2018-06-19 00:18



Si has estado haciendo commits en su rama principal mientras codificaba, pero ahora desea mover esas confirmaciones a una rama diferente:

  1. Copie su historial actual en una nueva sucursal, trayendo consigo cualquier cambio no confirmado:

    git checkout -b <new-feature-branch>
    
  2. Ahora fuerce a la rama original "desordenada" a retroceder: (sin cambiar a ella)

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

    Por ejemplo:

    git branch -f master origin/master
    

    o si has hecho 4 commits:

    git branch -f master HEAD~4
    

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

Una alternativa es usar esta técnica de reinicio. Pero esas instrucciones descartarán cualquier cambio no confirmado que tenga. Si desea conservarlos, guárdelos primero y destrúyalos al final.


35
2018-02-12 07:44



Si lo cometes, también puedes elegir la ID de compromiso individual. Hago esto a menudo cuando comienzo a trabajar en master, y luego quiero crear una rama local antes de empujar hacia arriba a mi origen /.

git cherry-pick <commitID>

Hay mucho que puedes hacer con cherry-pick, como se describe aquí, pero este podría ser un caso de uso para ti.


15
2017-11-30 20:58