¿Cómo puedo copiar el contenido de una sucursal a una nueva sucursal local?

270

He trabajado en una sucursal local y también empujé los cambios a remoto. Quiero revertir los cambios en esa rama y hacer algo más al respecto, pero no quiero perder el trabajo por completo. Estaba pensando en algo como crear una nueva rama localmente y copiar la rama vieja allí, luego puedo revertir los cambios y continuar trabajando en la rama vieja. ¿Hay una mejor manera tal vez? ¿O cómo hago esto?

serengeti12
fuente
10
4 años después, con Git 2.15 (Q4 2017), tendrás git branch -c A B. Vea mi respuesta a continuación
VonC

Respuestas:

445
git checkout old_branch
git branch new_branch

Esto le dará una nueva rama "new_branch" con el mismo estado que "old_branch".

Este comando se puede combinar con lo siguiente:

git checkout -b new_branch old_branch
Daniel Hilgarth
fuente
134
O incluso más corto git checkout -b new_branch(cuando ya estás en old_branch).
Koraktor
44
Esto solo crea la nueva rama pero no puede copiar el contenido de una rama a otra rama. Cuando intento estos comandos, solo muestra "La rama llamada **** ya existe".
anoop
77
Creo que si uno crea una nueva rama como esta, no tiene instantáneamente una copia de la rama anterior, sino simplemente un nuevo puntero en la cabecera de la rama anterior. Pero cuando ahora hace algo como cambiar la rama nueva, debería ver que la rama vieja todavía está en su estado original mientras se modifica la nueva rama. Así que creo que hace lo que quiere el OP.
uli_1973
1
git checkout old_branch y git branch new_branch .... Es mejor usar el comando anterior en la producción, ya que el siguiente comando creará una nueva rama y lo llevará a la nueva rama (cambiar rama como nueva rama) .... git checkout -b new_branch old_branch
Kiran
Para sobrescribir una rama, consulte stackoverflow.com/questions/26961371/…
MCCCS
55
git branch copyOfMyBranch MyBranch

Esto evita el acto potencialmente innecesario de perder una sucursal. Recuerde que un proceso de pago modifica el "árbol de trabajo", lo que podría llevar mucho tiempo si es grande o contiene archivos grandes (imágenes o videos, por ejemplo).

Lyle Z
fuente
1
Por supuesto, si tiene archivos binarios en git, especialmente los grandes, probablemente valga la pena analizar su estrategia para dichos archivos. Naturalmente, existirán casos inusuales y tener archivos binarios en git sería perfectamente aceptable.
reverendo
52

Con Git 2.15 (Q4 2017), " git branch" aprendió " -c/-C" a crear una nueva sucursal copiando una existente.

Ver commit c8b2cec (18 de junio de 2017) por Ævar Arnfjörð Bjarmason ( avar) .
Ver commit 52d59cc , commit 5463caa (18 de junio de 2017) por Sahil Dua ( sahildua2305) .
(Fusionada por Junio ​​C Hamano - gitster- en commit 3b48045 , 03 oct 2017)

branch: agrega una opción --copy( -c) para ir con --move( -m)

Agregue la capacidad a --copyuna rama y su reflog y configuración, esto usa la misma maquinaria subyacente que la opción --move( -m) excepto que el reflog y la configuración se copian en lugar de moverse.

Esto es útil para, por ejemplo, la copia de una rama puntual a una nueva versión, por ejemplo, workpara work-2después de presentar el worktema a la lista, mientras que preserva toda la información de seguimiento y otra configuración que va con la rama, y al contrario que --movemanteniendo la otra rama presentado ya-en torno a referencia.

Nota: al copiar una rama, permanece en su rama actual.
Como explica Junio ​​C Hamano:

Al crear una nueva rama Bcopiando la rama Aque resulta ser la rama actual, también se actualiza HEADpara apuntar a la nueva rama.
Probablemente se hizo de esta manera porque " git branch -c A B" superpuso su implementación en " git branch -m A B",

Esto no coincide con la expectativa habitual.
Si estuviera sentado en una silla azul, y alguien viene y lo vuelve a pintar en rojo, aceptaría terminar sentado en una silla que ahora es roja (en cambio, también estoy de acuerdo, ya que ya no hay mi silla azul favorita )

Pero si alguien crea una nueva silla roja, modelándola después de la silla azul en la que estoy sentado, no espero que la arranquen de la silla azul y termine sentada en la nueva roja.

VonC
fuente