Es posible que alguna vez necesites extraer una rama de un repo de git para crear uno nuevo con ella, pero sin querer perder todo el historial de cambios que afectaba a dicha rama.
Este fue el caso de uno de mis proyectos npkill. Antes, en el repo principal, tenía la web del mismo en la rama gh-pages
. Esto era más que suficiente ya que la web era muy básica. Sin embargo, recientemente decidí reconstruirla con Astro y me pareció mejor idea la de tenerla en un repo dedicado principalmente por dos motivos:
- No quería aumentar el tamaño de repo principal por insertar imágenes.
- Me parece poco práctico tener una rama independiente del proyecto principal. A la larga termina trayendo problemas.
Separando la rama y creando el nuevo repo
Para crear un repositorio nuevo partiendo de una rama:
-
Clonamos el proyecto en otro lugar, renombramos el directorio (a por ejemplo, repo-web) y entramos en el.
-
Hacemos checkout a la rama que queremos conservar (
gh-pages
por ejemplo). -
Borrar todas las demás ramas (podemos verlas con
git branch
). Si son pocas Podemos borrarlas a mano, pero seguro que te es más práctico este comando:git branch | grep -v "gh-pages" | xargs git branch -D # ↪ Rama que quieres conservar
-
Borrar también todas las etiquetas con:
git tag | xargs git tag -d
Podríamos pensar que estamos listos pero queda lo más importante. Git aún tiene información “basura” que no nos interesa. Más que nada porque ocupara espacio innecesario.
-
Para borrar todo aquello:
git gc --prune=now --aggressive
-
Por último, borra las referencias remotas. En caso de que solo tengas la default (
origin
):git remote rm origin
En este punto ya tendremos un nuevo repositorio con únicamente el historial y la información relacionada con la rama actual. Como si nunca hubiera existido nada más.
Limpiando el repo inicial
Teniendo ya el nuevo repo creado, ahora podemos borrar la rama que hemos separado en el repo inicial. Para ello:
git branch -D gh-pages # Borramos rama local
git push origin --delete gh-pages # Borramos rama del remoto