Solución:
Generalmente me gusta fusionar master
en el development
primero para que si hay algún conflicto, pueda resolver en el development
rama en sí y mi master
permanece limpio.
(on branch development)$ git merge master
(resolve any merge conflicts if there are any)
git checkout master
git merge development (there won't be any conflicts now)
No hay mucha diferencia en los dos enfoques, pero a veces he notado que no quiero fusionar la rama en master
sin embargo, después de fusionarlos, o que todavía hay más trabajo por hacer antes de que se puedan fusionar, por lo que tiendo a dejar master
intacto hasta la materia final.
EDITAR: De comentarios
Si desea realizar un seguimiento de quién realizó la fusión y cuándo, puede usar --no-ff
bandera mientras se fusiona para hacerlo. Por lo general, esto es útil solo cuando se fusionan development
en el master
(último paso), porque es posible que deba fusionar master
dentro development
(primer paso) varias veces en su flujo de trabajo, y la creación de un nodo de confirmación para estos puede no ser muy útil.
git merge --no-ff development
Personalmente, mi enfoque es similar al tuyo, con algunas ramas más y un poco de aplastamiento de confirmaciones cuando vuelven a master.
A uno de mis compañeros de trabajo no le gusta tener que cambiar tanto de rama y permanece en la rama de desarrollo con algo similar a lo siguiente, todo ejecutado desde la rama de desarrollo.
git fetch origin master
git merge master
git push origin development:master
La primera línea se asegura de que tenga las confirmaciones ascendentes que se hayan realizado para dominar desde la última vez que actualizó su repositorio local.
El segundo extrae esos cambios (si los hay) del maestro al desarrollo
El tercero empuja la rama de desarrollo (ahora completamente fusionada con master) hasta origin / master.
Puede que tenga su flujo de trabajo básico un poco mal, pero esa es la esencia principal.
Explicación desde abajo para aquellos que vinieron aquí sin ningún conocimiento de sucursales.
La lógica básica de desarrollo de la rama maestra es: solo trabaja en otras ramas y usa la maestra solo para fusionar otras ramas.
Comienzas a crear una nueva rama de esta manera:
- Clone el repositorio en su directorio local (o cree un nuevo repositorio):
$ cd /var/www
$ git clone [email protected]:user_name/repository_name.git
- Crea una nueva rama. Contendrá los archivos más recientes de su repositorio de rama maestro
$ git branch new_branch
- Cambia tu rama de git actual a new_branch
$ git checkout new_branch
- Codifica, confirma, como de costumbre …
$ git add .
$ git commit -m “Initial commit”
$ git push # pushes commits only to “new_branch”
- Cuando termine el trabajo en esta rama, fusionar con la rama “maestra”:
$ git merge master
$ git checkout master # goes to master branch
$ git merge development # merges files in localhost. Master shouldn’t have any commits ahead, otherwise there will be a need for pull and merging code by hands!
$ git push # pushes all “new_branch” commits to both branches - “master” and “new_branch”
También recomiendo usar la aplicación Sourcetree para ver el árbol visual de cambios y ramas.