Hero

Como crear un nuevo branch completamente en blanco en Git

Abril 29, 2014

enzo
GIT

Se que esta no es una de esas cosas que hagamos todos los días con Git, porque precisamente en eso reside el poder de Git en crear nuevos branchs a partir de una historia presente e seguir con el proceso de desarrollo que quizá en un futuro devuelva el branch creado al branch principal.

Pero que pasa cuando por algún tema de re arquitectura del proyecto, toda la estructura de de archivos y los mismos archivos casi que van a cambiar en un 100%, que puede pasar si digamos cambiamos de framework o quizá si encontramos una forma de poder empaquetar nuestro proyecto en forma de core y lo demás se incluye de otra forma, o en cualquier otro escenario hipotético que la estructura actual ya no sea necesaria; Peor aun si queremos que eso pase en nuestro tan amado branch master.

Bueno si estas en este dilema no te preocupes, ahora vemos los pasos para realizar esta tarea.

  1. Guardar nuestro branch.

Lo primero que debemos hacer es respaldar nuestro branch con el siguiente comando.

$ git branch -m master old_master

Si ahora hacemos una revision de lo branch veremos el nuevo branch, pero curiosamente no estará seleccionado ningun branch, el cual es indicado por el característico símbolo * delante del branch como vemos a continuación.

$ git branch
  old_master
  1. Crear nuevo branch en blanco.

Ahora que hemos guardado la nuevo master branch en un nuevo branch podemos crear nuevo nuevo branch en blanco con el siguiente comando.

$ git checkout --orphan master

Esto tendrá el mismo efecto que cuando hacemos un git init, que aun no crear el branch pero ya podemos realizar operaciones de git.

Si ejecutamos un git status todos los archivos que estaban en el branch anterior no se han borrando del sistema de archivos, por lo tanto los marca como si fueran nuevos archivos que se agregarían en un proximo commit.

Para evitar esto debemos borrar los archivos y directorios, pero sin borrar el folder .git, por que si lo borramos perderíamos nuestro historico y no podríamos subir los cambios.

Para los que les gusta mucho los script de bash, aquí les dejo un script que borra los archivos reportados por git para agregar, de esta forma garantizamos que los archivos marcados por el .gitignore no sean borrados como se muestra a continuación.

$ git status | grep "new file:" | awk -F'new file:   ' '{ print "rm "$2}' | sh

Lo anterior dejaría solo directorios vacíos, los cual podríamos borrar con una técnica parecida, a continuación una version que utiliza solo el listado de directorios para borrarlos.

$ ls | awk '{print "rm -R " $1}' | sh

Ahora con nuestro repositorio local vacío solo debemos agregar una archivo o archivos para poder hacer un commit y para que así nuestro nuevo master branch sea creado.

$ touch README.txt
$ git add README.txt

$ git commit -m "Started new tree" -a
[master (root-commit) 14cefcd] Started new tree
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.txt

Luego de hacer el commit, nuestro nuevo branch ya esta disponible y saldrá listado como nuestro branch activo.

$ git branch
* master
  old_master

Para finalizar solo debemos enviar nuestros cambios al repositorio remoto con los siguientes comando.

$ git push origin old_master
$ git push -f origin master

Es posible que el comando git push -f origin master falle si en el servidor la opción denyNonFastforwards = true este activada; En este caso debemos escoger un nuevo nombre para nuestro nuevo branch en blanco, como por ejemplo

 git branch -m master master-with-make

Con lo que ahora si podemos subir nuevo nuevo repositorio en el server remoto.

$ git push origin master-with-make

Espero que haya sido de su agrado.

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.