Mueva el trabajo existente no comprometido a una nueva rama en Git

7 minutos de lectura

Mueva el trabajo existente no comprometido a una nueva rama
Dane O´Connor

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

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

Quiero restablecer mi rama actual mientras conservo el trabajo existente en la nueva función.

  • El mismo tema interesante stackoverflow.com/q/556923/269514?

    – Gilberto

    14 de febrero de 2020 a las 17:23

Mueva el trabajo existente no comprometido a una nueva rama
tejer

Actualización 2020 / Git 2.23

Git 2.23 agrega el nuevo switch subcomando en un intento de aclarar parte de la confusión que proviene del uso sobrecargado de checkout (cambiar de rama, restaurar archivos, desconectar HEAD, etc.)

A partir de esta versión de Git, reemplace el comando de pago con:

git switch -c <new-branch>

El comportamiento es idéntico y permanece sin cambios.


Antes de la actualización 2020 / Git 2.23

Usa lo siguiente:

git checkout -b <new-branch>

Esto dejará su rama actual como está, creará y pagará una nueva rama y mantendrá todos sus cambios. Luego puede realizar cambios en los archivos para confirmar con:

git add <files>

y comprometerse con su nueva sucursal con:

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

Los cambios en el directorio de trabajo y los cambios organizados en el índice no pertenecen a ninguna rama aún. Esto cambia la rama donde terminarían esas modificaciones.

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

  • Solo para asegurarme, ¿debo confirmar la función sin terminar ANTES de restablecer mi rama original? ¿O se conservarán esos archivos no comprometidos independientemente de la confirmación?

    – Dane O’Connor

    8 de septiembre de 2009 a las 16:02

  • FYI: los cambios en el directorio de trabajo y los cambios por etapas en el índice no pertenecen a una rama. git checkout -b <new branch> cambios en los que esos cambios terminarían.

    – Jakub Narębski

    08/09/2009 a las 17:00

  • Si ya tiene una sucursal y desea mover sus cambios a la sucursal existente, visite stackoverflow.com/questions/556923/…

    – Chirantán

    25 de enero de 2011 a las 8:41


  • Si desea enviar su nueva rama al repositorio remoto: stackoverflow.com/questions/2765421/…

    – Dewayne

    13 de diciembre de 2013 a las 2:15

  • @JDSmith: cancelar cambios no pertenecen a alguna rama. Solo residen en el directorio de trabajo. git checkout ./git reset --hard será irrecuperable retirar ellos

    – tejer

    5 de noviembre de 2015 a las 6:33

Mueva el trabajo existente no comprometido a una nueva rama
petirrojo qiu

Alternativamente:

  1. Guarde 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 del alijo.

  • Si la otra sucursal ya existe, puede simplemente cambiar a ella con el pago, luego git stash apply.

    – arcónico

    21 de diciembre de 2015 a las 18:27

  • No entiendo el consejo “Consejo: use la tecla de tabulación para reducir la escritura del nombre del alijo”. ¿No es “almacén@{0}” el nombre? No puedo ejecutarlo con éxito.

    – Herbert

    7 de abril de 2017 a las 3:58

  • ¿Por qué es mejor que la respuesta aceptada stackoverflow.com/a/1394804/754997?

    – Página de Chris

    30 de mayo de 2017 a las 23:17

  • No entiendo por qué esto es mejor que la respuesta aceptada de git checkout -b <new branch name>

    – Noitidart

    11 de agosto de 2017 a las 5:32

  • no necesitas git add -A antes de esconder.

    – Vichle

    10 de febrero de 2018 a las 13:09

1646973014 257 Mueva el trabajo existente no comprometido a una nueva rama
joeytwiddle

Si has estado haciendo commits en su rama principal mientras codificaba, pero ahora quiere mover esas confirmaciones a una rama diferente, esta es una forma rápida:

  1. Copie su historial actual en una nueva rama, incorporando también los cambios no confirmados:

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

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

    Por ejemplo:

     git branch -f master origin/master
    

    o si hubieras hecho 4 commits:

     git branch -f master HEAD~4
    

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

Advertencia: Si realiza un rebase después de la bifurcación, existe el peligro de que se pierdan algunas confirmaciones, lo cual se describe aquí. La única forma de evitar eso es crear un nuevo historial usando cherry-pick. Ese enlace describe el método infalible más seguro, aunque menos conveniente. (Si tiene cambios no confirmados, es posible que deba git stash al principio y git stash pop al final.)

  • Esto responde a una pregunta que es ligeramente diferente de lo que preguntó el operador. Decidí poner esta respuesta aquí porque aquí es donde Google me trajo cuando estaba buscando una respuesta. La pregunta real que se ocupa de esta situación está aquí.

    – joeytwiddle

    28 de diciembre de 2016 a las 4:49

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 funciones anterior. He encomendado todo el trabajo “antiguo” a la rama maestra y quiero que mi nueva rama crezca a partir de la “maestra”. No he hecho ni 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 ID de confirmación único. Hago esto a menudo cuando empiezo a trabajar en el maestro y luego quiero crear una rama local antes de subir a mi origen/.

git cherry-pick <commitID>

Hay muchas cosas que puedes hacer con cherry-pick, como se describe aquípero esto podría ser un caso de uso para usted.

  • Una mejor solución para mover cambios parciales a una nueva rama… ya que puede confirmar lo que quiera por ahora, ocultar todos los demás cambios, verificar la rama desde la que desea ramificarse, seleccionar esa confirmación en la nueva rama, volver a la rama original, restablezca por completo una confirmación, luego haga un stash pop, agregue, confirme y cante aleluya.

    – Meredith

    22 de enero de 2016 a las 10:24


  • @Meredith, jaja, algo así. Esto es genial, a menos que planifique sus cambios con anticipación… y quién lo hace;)

    – clave

    22 de enero de 2016 a las 17:10

1646973014 273 Mueva el trabajo existente no comprometido a una nueva rama
kristofer doman

En realidad, hay una manera muy fácil de hacer esto con GitHub Desktop ahora que no creo que fuera una función antes.

Todo lo que necesita hacer es cambiar a la nueva rama en GitHub Desktop y le pedirá que deje sus cambios en la rama actual (que se ocultará) o que traiga sus cambios a la nueva rama. Solo elige la segunda opción, para traer los cambios a la nueva sucursal. A continuación, puede comprometerse como de costumbre.

Escritorio GitHub

  • Una mejor solución para mover cambios parciales a una nueva rama… ya que puede confirmar lo que quiera por ahora, ocultar todos los demás cambios, verificar la rama desde la que desea ramificarse, seleccionar esa confirmación en la nueva rama, volver a la rama original, restablezca por completo una confirmación, luego haga un stash pop, agregue, confirme y cante aleluya.

    – Meredith

    22 de enero de 2016 a las 10:24


  • @Meredith, jaja, algo así. Esto es genial, a menos que planifique sus cambios con anticipación… y quién lo hace;)

    – clave

    22 de enero de 2016 a las 17:10

1646973016 562 Mueva el trabajo existente no comprometido a una nueva rama
Przemek Struciński

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

Mando

Cambiar de rama: moverá los cambios a la nueva rama. Entonces puedes confirmar los cambios.

 $ git checkout -b <new-branch>

TortugaGIT

Haga clic derecho en su repositorio y luego use TortoiseGit->Switch/Checkout

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

Árbol de origen

Use el botón “Pagar” para cambiar de sucursal. Verá el botón “Pagar” en la parte superior después de hacer clic en una sucursal. Los cambios de la rama actual se aplicarán automáticamente. Entonces puedes cometerlos.

ingrese la descripción de la imagen aquí

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad