Tengo mi master
sucursal y una develop
sucursal para trabajar en algunos cambios. Necesito fusionar los cambios desde master
dentro develop
, pero eventualmente fusionaré todo desde develop
dentro master
. Tengo dos flujos de trabajo diferentes en mente:
git pull origin master
endevelop
ramagit merge master
endevelop
rama
¿Cuál es la mejor manera de hacer esto y por qué?
git pull
=git fetch
+git merge FETCH_HEAD
Respuestas:
Ten cuidado con rebase. Si está compartiendo su rama de desarrollo con alguien, rebase puede hacer un desastre. Rebase es bueno solo para sus propias sucursales locales.
Como regla general, si ha empujado la rama al origen, no use rebase. En su lugar, use merge.
fuente
git push origin rebasedBranch --force
repositorio privado? El único usuario soy yo.Este flujo de trabajo funciona mejor para mí:
... hacer algunos cambios ...
... aviso maestro ha sido actualizado ...
... cometer cambios para desarrollar ...
... traer esos cambios nuevamente al desarrollo ...
... hacer algunos cambios más ...
... comprometerlos a desarrollar ...
... fusionarlos en maestro ...
fuente
git pull
justo antes de la finalgit merge develop
. ¿Cuál es el propósito de eso?git pull --rebase origin master
en su rama de desarrollo es un poco más rápido.El mejor enfoque para este tipo de cosas es probablemente
git rebase
. Le permite extraer cambios del maestro en su rama de desarrollo, pero dejar todo su trabajo de desarrollo "encima" (más adelante en el registro de confirmación) del material del maestro. Cuando se completa su nuevo trabajo, la fusión de nuevo al maestro es muy sencilla.fuente
develop
que no se comparta con nadie más.develop
se comparte con otros contribuyentes, ¿cómo actualizaríamosdevelop
cuando se introdujeran directamente algunas revisionesmaster
? ¿Deberíamos hacer una fusión, es decirgit checkout master && git pull --rebase && git checkout develop && git merge master
? Dejé un comentario sobre la respuesta más votada arriba, que también detalla esta preocupación.Si no está compartiendo la sucursal de desarrollo con nadie, entonces simplemente la cambiaría cada vez que se actualice master, de esa manera no tendrá compromisos de fusión en toda su historia una vez que fusione el desarrollo en maestro. El flujo de trabajo en este caso sería el siguiente:
Los pasos anteriores asegurarán que su rama de desarrollo estará siempre al tanto de los últimos cambios de la rama maestra. Una vez que haya terminado con la rama de desarrollo y se haya modificado con los últimos cambios en el maestro, puede fusionarlo nuevamente:
fuente
mi regla de oro es:
ejemplos para los mismos nombres serían
master
,origin/master
yotherRemote/master
.si
develop
existe solo en el repositorio local y siempre se basa en unaorigin/master
confirmación reciente , debe llamarlomaster
y trabajar allí directamente. simplifica tu vida y presenta las cosas como realmente son: estás desarrollándote directamente en lamaster
rama.si
develop
se comparte, no debe volver a basarse en élmaster
, solo fusionarse con él--no-ff
. está desarrollando endevelop
.master
ydevelop
tienen nombres diferentes, porque queremos que sean cosas diferentes y que se mantengan separadas. no los hagas igual conrebase
.fuente