Tengo mi mastersucursal y una developsucursal para trabajar en algunos cambios. Necesito fusionar los cambios desde masterdentro develop, pero eventualmente fusionaré todo desde developdentro master. Tengo dos flujos de trabajo diferentes en mente:
git pull origin masterendevelopramagit merge masterendeveloprama
¿Cuál es la mejor manera de hacer esto y por qué?

git pull=git fetch+git merge FETCH_HEADRespuestas:
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 --forcerepositorio 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 pulljusto antes de la finalgit merge develop. ¿Cuál es el propósito de eso?git pull --rebase origin masteren 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
developque no se comparta con nadie más.developse comparte con otros contribuyentes, ¿cómo actualizaríamosdevelopcuando 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/masteryotherRemote/master.si
developexiste solo en el repositorio local y siempre se basa en unaorigin/masterconfirmación reciente , debe llamarlomastery trabajar allí directamente. simplifica tu vida y presenta las cosas como realmente son: estás desarrollándote directamente en lamasterrama.si
developse comparte, no debe volver a basarse en élmaster, solo fusionarse con él--no-ff. está desarrollando endevelop.masterydeveloptienen nombres diferentes, porque queremos que sean cosas diferentes y que se mantengan separadas. no los hagas igual conrebase.fuente