Pregunta

Me comenzó un trabajo sobre una nueva característica y después de la codificación para un poco, decidí esta función debe estar en su propia rama.

¿Cómo se mueven los cambios no confirmados existentes a una nueva rama y restablecer mi actual?

Quiero reiniciar mi rama actual preservando al mismo tiempo el trabajo existente en la nueva función.

¿Fue útil?

Solución

Utilice la siguiente:

git checkout -b <new-branch>

Esto dejará su rama actual como es, crear, y obtenga una nueva rama y mantener todos los cambios. A continuación, puede hacer un commit con:

git add <files>

y comprometerse a su nueva rama con:

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

Los cambios en el directorio de trabajo y cambios en el índice de puesta en escena no pertenecen a ninguna rama todavía. Esto cambia cuando esos cambios se acabaría en.

no Restablecer su sucursal original, que queda como está. La última confirmación de <old-branch> seguirá siendo el mismo. Por lo tanto, checkout -b y luego comprometerse.

Otros consejos

Alternativamente:

  1. Guardar cambios actuales a un alijo de temperatura:

    $ git stash

  2. Crea una nueva rama en base a este escondite, y el cambio a la nueva rama:

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

Consejo:. Uso tecla de tabulación para reducir a escribir el nombre alijo

Si usted ha estado haciendo confirmaciones en su rama principal, mientras que codificado, pero ahora desea mover esas confirmaciones a una rama diferente:

  1. Copia de su historia actual a una nueva rama, con lo que a lo largo de los cambios no confirmados también:

    git checkout -b <new-feature-branch>
    
  2. Ahora forzar el original rama "sucio" para volver roll: (sin cambiar a ella)

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

    Por ejemplo:

    git branch -f master origin/master
    

    o si se había realizado 4 se compromete:

    git branch -f master HEAD~4
    

Advertencia: Parece que se git branch -f master origin/master restablecer la información de seguimiento de dicha rama. Así que si usted ha configurado su rama master a empujar a algún lugar que no origin/master entonces que la configuración se perderá.

Una alternativa es usar esta técnica de reposición . Pero esas instrucciones, se descartarán los cambios no confirmados que tiene. Si desea mantener los, esconderlos primero y les unstash al final.

El escenario común es la siguiente: Me olvidé de crear la nueva rama de la nueva característica, y estaba haciendo todo el trabajo en la antigua rama de la característica. He cometido toda la "vieja" trabajo a la rama principal, y yo quiero que mi nueva rama a crecer desde el "maestro". No he hecho una única confirmación de mi nuevo trabajo. Esta es la estructura de las ramas: "Maestro" -> "Old_feature"

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

Si se compromete, usted podría también cereza recoger la única confirmación de identificación. Lo hago a menudo cuando empiezo a trabajar en el maestro, y luego quiero crear una sucursal local antes de empujar hacia arriba a mi origen /.

git cherry-pick <commitID>

Hay mucho que puede hacer con la cereza-escoge, como se describe aquí , pero esto podría ser un caso de uso para usted.

@Robin respuesta y una lista de todo lo que hice,

git status                               <-- review/list uncommitted changes
git stash                                <-- stash uncommitted changes
git stash branch <new-branch> stash@{1}  <-- create a branch from stash
git add .                                <-- add local changes
git status                               <-- review the status; ready to commit
git commit -m "local changes ..."        <-- commit the changes
git branch --list                        <-- see list of branches incl the one created above
git status                               <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch>                <-- switch back

Si el repositorio tiene más de un escondite, ver cuál aplicar a la nueva rama:

git stash list  
  stash@{0}: WIP on ...  
  stash@{1}: WIP on ...

e inspeccionar el alijo individuo por,

git stash show stash@{1}

o inspeccionar todos los alijos a la vez:

git stash list -p

En realidad, hay una manera muy fácil de hacer esto con GitHub escritorio ahora que no creo que era una característica antes.

Todo lo que necesita hacer es cambiar a la nueva sucursal en GitHub de escritorio, y se le pedirá que deje sus cambios en la rama actual (que serán acumulados), o para traer sus cambios con usted a la nueva rama. Sólo tienes que elegir la segunda opción, para llevar a los cambios en la nueva rama. A continuación, puede cometer como de costumbre.

GitHub Desktop

Esto puede ser útil para todos los que utilizan herramientas para GIT

comando

rama Switch - se moverá sus cambios a la nueva rama. A continuación, puede confirmar los cambios.

 $ git checkout -b <new-branch>

TortoiseGit

Haga clic derecho en su repositorio y luego usar TortoiseGit-> Interruptor / Pedido

introducir descripción de la imagen aquí introducir descripción de la imagen aquí

SourceTree

Utilice el botón "Comprar" en rama interruptor. Verá el botón "checkout" en la parte superior después de hacer clic en una rama. Los cambios de la rama actual se aplicarán automáticamente. A continuación, puede comprometerse ellos.

introducir descripción de la imagen aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top