practices - “Git pull” o “git merge” entre las ramas maestra y de desarrollo
git workflow implementation (5)
Tengo mi rama master y una rama de develop para trabajar en algunos cambios. Necesito fusionar los cambios del master al develop , pero eventualmente fusionaré todo desde el develop al master . Tengo dos flujos de trabajo diferentes en mente:
-
git pull origin masterendeveloprama -
git merge masterendeveloprama
¿Cuál es la mejor manera de hacer esto y por qué?
El mejor enfoque para este tipo de cosas es probablemente git rebase . Le permite extraer los cambios del maestro a su rama de desarrollo, pero dejar todo su trabajo de desarrollo "encima" (más adelante en el registro de confirmación) las cosas del maestro. Cuando su nuevo trabajo está completo, la fusión de nuevo con el maestro es muy sencilla.
Este flujo de trabajo funciona mejor para mí:
git checkout -b develop
... hacer algunos cambios ...
... aviso maestro ha sido actualizado ...
... cometer cambios para desarrollar ...
git checkout master
git pull
... traer esos cambios de nuevo en desarrollo ...
git checkout develop
git rebase master
... hacer algunos cambios más ...
... comprometerlos a desarrollar ...
... fusionarlos en maestro ...
git checkout master
git pull
git merge develop
Si no está compartiendo la rama de desarrollo con nadie, entonces simplemente la volvería a actualizar cada vez que se actualice el maestro, de esa manera no tendrá compromisos de fusión en todo su historial una vez que fusione el desarrollo en maestro. El flujo de trabajo en este caso sería el siguiente:
> git clone git://<remote_repo_path>/ <local_repo>
> cd <local_repo>
> git checkout -b develop
....do a lot of work on develop
....do all the commits
> git pull origin master
> git rebase master develop
Los pasos anteriores asegurarán que su rama de desarrollo siempre estará al tanto de los últimos cambios de la rama maestra. Una vez que haya terminado con el desarrollo de rama y se actualice a los últimos cambios en el maestro, puede volver a fusionarlo:
> git checkout -b master
> git merge develop
> git branch -d develop
Ten cuidado con la rebase. Si estás compartiendo tu rama de desarrollo con alguien, rebase puede hacer un lío de cosas. Rebase es bueno solo para sus propias sucursales locales.
Regla de oro, si ha empujado la rama a origen, no use rebase. En su lugar, utilice la combinación.
mi regla de oro es:
rebasepara sucursales con el mismo nombre ,mergeotra manera.
los ejemplos para los mismos nombres serían master , origin/master y otherRemote/master .
Si el develop solo existe en el repositorio local, y siempre se basa en un origin/master confirmación de envío reciente, debe llamarlo master y trabajar allí directamente. simplifica tu vida y presenta las cosas tal como son en realidad: estás desarrollando directamente en la rama master .
si se comparte el develop , no se debe volver a basar en el master , simplemente fusionarlo de nuevo con --no-ff . Usted está desarrollando en develop . master y el develop tienen nombres diferentes, porque queremos que sean cosas diferentes y permanezcan separados. No los hagas iguales con rebase .