Skip to content

Instantly share code, notes, and snippets.

@aaossa
Created October 1, 2017 19:28
Show Gist options
  • Star 21 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save aaossa/7db152babead60ab097ba2c898d379a6 to your computer and use it in GitHub Desktop.
Save aaossa/7db152babead60ab097ba2c898d379a6 to your computer and use it in GitHub Desktop.
Cómo trabajar con git branches

Workflow con git

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

Pasos para empezar a trabajar en una feature

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.

Pasos para terminar de trabajar en una feature

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)

Notas

  • Si no sabemos en que branch estamos: git branch
  • Para cambiar de branch: git checkout branch_objetivo
@goth14wx
Copy link

muchas gracias por esto, en serio me esta ayudando muchisimo con un proyecto que tengo, en serio muchas gracias amigo

@Ferrrnando
Copy link

No se debe hacer merge para pasar los cambios hechos en la feature branch hacia el branch dev ?????

@aaossa
Copy link
Author

aaossa commented Nov 26, 2019

Sí, pero aquí recomiendo usar la interfaz de GitHub para hacerlo con Pull Requests, que hace el merge una vez que se hace merge de la PR

@Ferrrnando
Copy link

Yaaaa...Perfecto gracias 👍.

@masalinas
Copy link

masalinas commented Jun 29, 2020

Pero si existen conflictos entre DEV y tu rama deberías de mezclar tu rama con DEV primero en local y resolver los conflictos y solo despues subir los cambios a tu rama y entonces lanzar un PR para que tus cambios ya mezclados regresen a DEV correctamente, sino Github te dira que no puede hacer el PR por haber conflictos y que tienes que resolverlos en local ...

@Min11Benja
Copy link

Muchas gracias, excelente guia! Saludos

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment