Mientras ayudaba a un amigo con un problema de git hoy, tuve que introducir una rama que necesitaba estar totalmente separada de la master
rama. El contenido de esta rama realmente tenía un origen diferente del que se había desarrollado en la master
rama, pero iban a fusionarse en la master
rama más adelante.
Recordé al leer Git de John Wiegley de abajo hacia arriba cómo las ramas son esencialmente una etiqueta para una confirmación que sigue una determinada convención y cómo una confirmación está vinculada a un árbol de archivos y, opcionalmente, a las confirmaciones principales. Fuimos a crear una confirmación sin padres para el repositorio existente usando la fontanería de git:
Así que nos deshicimos de todos los archivos en el índice ...
$ git rm -rf .
... extrajo directorios y archivos de un tarball, los agregó al índice ...
$ git add .
... y creó un objeto de árbol ...
$ git write-tree
( git-write-tree
nos contó el sha1sum del objeto de árbol creado).
Luego, confirmamos el árbol, sin especificar las confirmaciones principales ...
$ echo "Imported project foo" | git commit-tree $TREE
( git-commit-tree
nos dijo el sha1sum del objeto commit creado).
... y creó una nueva rama que apunta a nuestro commit recién creado.
$ git update-ref refs/heads/other-branch $COMMIT
Finalmente, volvimos a la master
sucursal para continuar trabajando allí.
$ git checkout -f master
Esto parece haber funcionado según lo planeado. Pero claramente este no es el tipo de procedimiento que recomendaría a alguien que recién comienza a usar git, por decirlo suavemente. ¿Existe una manera más fácil de crear una nueva rama que no esté relacionada con todo lo que ha sucedido en el repositorio hasta ahora?