Para este proyecto seguiremos la metodología de tener una branch principal master
(equivalente a release
en otros proyectos), una branch dev
(o development
) para comprobar que todo funcione antes de enviar los cambios a master
y múltiples "feature branches" para que cada colaborador pueda enacrgarse de una tarea definida, trabajarla y probarla a gusto antes de reunir los cambios en dev
. Para más detalle y ejemplos pueden usar de esta lectura la sección Feature Branch Workflow.
From: https://www.atlassian.com/pt/git/workflows
Supongamos que queremos trabajar en una nueva feature. Primero que todo debemos crear una branch exclusiva para trabajar en la feature. Esta branch debe crearse a partir de development
, no a partir de master
. Cuando abrimos git en la carpeta en la que clonamos este repositorio deberíamos ver en que branch estamos:
$ git branch
* master
Ahora, nosotros queremos partir nuestro trabajo desde development
, por lo que debemos movernos a esta branch:
$ git checkout development
Checking out files: 100% (315/315), done.
Branch development set up to track remote branch development from origin.
Switched to a new branch 'development'
Lo que esto nos dice es que nuestra carpeta local ha hecho cambios para lucir como la branch development
. Si hay diferencias entre la branch master
y la branch development
podremos verlas, por ejemplo, si es que nos falta un archivo que está en master
pero no en development
. Lo importante ahora es que nos encontramos en la branch en la que queremos partir. El siguiente paso es crear la feature branch en la que trabajaremos, para lo que debemos hacer:
$ git checkout -b feature_branch development
Switched to a new branch 'feature_branch'
Lo que esto nos dice es que hemos creado localmente una branch feature_branch
, que es una sub-branch de development
. Pero como queremos trabajar con el servidor remoto, en este caso Github, debemos notificarle que "conecte" la branch local feature_branch
con la branch remota feature_branch
$ git push --set-upstream origin feature_branch
...
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/:user/:repo.git
* [new branch] feature_branch -> feature_branch
Branch feature_branch set up to track remote branch feature_branch from origin
Ahora estamos listos. Cuando hagamos nuestros cambios en el código, relevantes para la feature en la que estamos trabajando, cada vez que enviemos nuestros cambios (que hagamos git push
), estaremos enviando los cambios a la branch feature_branch
.
Una vez que todos los cambios necesarios para agregar una feature al proyecto ya fueron hechos, están listos los tests y todos aprueban los cambios, tenemos que enviar los cambios a development
. Para pasar los cambios de una brancha a otra haremos code review a través de las Pull Requests que Github implementa (todo esto se hace en la página de Github). Después de terminar el trabajo, solo cuando la feature ya está aplicada y testeada en development
tenemos que eliminar la branch correspondiente a la feature.
Remotamente, para que Github sepa que ya no existirá:
$ git push origin :feature_branch
...
To https://github.com/:user/:repo.git
- [deleted] feature_branch
Localmente, para que no nos aparezca cuando hagamos git branch
:
$ git branch -d feature_branch
Deleted branch feature_branch (was ...).
Este ultimo paso debemos hacerlo desde una branch distinta a feature_branch, por ejemplo desde master (git checkout master)
- Si no sabemos en que branch estamos:
git branch
- Para cambiar de branch:
git checkout branch_objetivo
Yaaaa...Perfecto gracias 👍.