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


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

 194
Author: Jason S, 2013-02-21

3 answers

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
 311
Author: Daniel Hilgarth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-21 10:00:35
git branch copyOfMyBranch MyBranch

Esto evita el acto potencialmente lento e innecesario de revisar una rama. Recuerde que un checkout 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).

 42
Author: Lyle Z,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-12 22:18:34

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

Véase commit c8b2cec (18 de junio de 2017) por Ævar Arnfjörð Bjarmason (avar).
Véase commit 52d59cc, commit 5463caa (18 Jun 2017) by Sahil Dua (sahildua2305).
(Merged by Junio C Hamano -- gitster -- in commit 3b48045 , 03 Oct 2017)

branch: añádase un --copy (-c) opción a ir con --move (-m)

Añadir la capacidad de --copy una rama y su reflog y configuración, esto utiliza la misma maquinaria subyacente que el --move (-m) opción excepto que el reflog y la configuración se copian en lugar de ser movidos.

Esto es útil para, por ejemplo, copiar una rama temática a una nueva versión, por ejemplo, work a work-2 después de presentar el tema work a la lista, mientras preservar toda la información de seguimiento y otra configuración que va con la sucursal, y a diferencia de --move mantener el otro ya presentado branch alrededor para la referencia.

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

Al crear una nueva rama B copiando la rama A que sucede a ser la rama actual, también se actualiza HEAD para apuntar a la nueva Sucursal.
Probablemente se hizo de esta manera porque "git branch -c A B " piggybacked 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 la vuelve a pintar en rojo, aceptaría terminar sentado en una silla que ahora es roja (también estoy bien para de pie, en su lugar, ya que ya no es mi silla azul favorito).

Pero si alguien crea una nueva silla roja, modelándola después de la azul silla en la que estoy sentado, no espero ser arrancado de la nada y terminar sentado en el nuevo rojo una.

 17
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-14 23:12:42