¿Cómo muevo una rama de Git a su propio repositorio?

180

Tengo una rama que me gustaría mover a un repositorio Git separado, e idealmente mantener el historial de esa rama en el proceso. Hasta ahora he estado mirando git filter-branch, pero no puedo entender si puede hacer lo que quiero hacer.

¿Cómo extraigo una rama de Git en su propio repositorio?

Aupajo
fuente

Respuestas:

281

Simplemente puede empujar una rama a un nuevo repositorio. Toda su historia irá con eso. A continuación, puede elegir si desea eliminar la rama del repositorio original.

p.ej

git push url://to/new/repository.git branch-to-move:new-branch-name

Para un nuevo repositorio, new-branch-name es típicamente master.

Se puede crear un nuevo repositorio vacío git init.

CB Bailey
fuente
15
En caso de que alguien se lo pregunte, sustituí la URL con la ruta a un directorio de repositorio de Git, y eso funcionó perfectamente.
Aupajo
48
También puede nombrar el nombre de la sucursal en el nuevo repositorio: git push url://to/new/repository.git branch-to-move:new-branch-name
Yves Van Broekhoven
44
El comentario anterior de Yves es correcto, de lo contrario no tendrá un maestro allí y el proceso de clonación concluirá warning: remote HEAD refers to nonexistent ref, unable to checkout.. Si ya está en esa etapa, simplemente vaya git checkout -b branch-to-movey esté a salvo o simplemente vaya git checkout -b mastera tener su rama maestra :)
Ain Tohvri
git checkout -b masterresolvió mi problema, estaba en la pantalla error: src refspec master does not match any.(solo me pregunto por qué no vi el nombre de la sucursal en la que estaba) Gracias
kangkyu
2
En caso de que esta respuesta también sea confusa para usted, así es como lo entendí para que funcione: 1) en su terminal, esté en el directorio que contiene el repositorio y la rama que desea convertir en un nuevo repositorio; 2) urldebe ser una URL de git, como [email protected]: brianzelip / groceries.git; 3) branch-to-movees la rama del repositorio actual que desea convertir en un nuevo repositorio; 4) new-branch-namees el nombre que desee para la nueva sucursal en la nueva operación está creando, es decir: master.
Brian Zelip el
19

Esto mantendrá el historial de todas las ramas, pero haga que su copia apunte a una rama en particular:

git clone -b newbranch CurrentRepo NewRepo

Esto no 'mueve' nada, solo hace una copia.

Damon
fuente
2
Vale la pena señalar que clone -bes nuevo. Requiere git> = 1.6.5 (lanzado en octubre de 2009).
CB Bailey
Tuve problemas para que esto funcionara, pero eso fue antes de ver el mensaje de Charles Bailey.
Aupajo