Tengo dos ramas, a saber, master
y development
en un repositorio de GitHub. Estoy haciendo todo mi desarrollo en la rama de desarrollo como se muestra.
git branch development
git add *
git commit -m "My initial commit message"
git push -u origin development
Ahora quiero fusionar todos los cambios en la development
rama en el master
. Mi enfoque actual es:
git checkout master
git merge development
git push -u origin master
Avíseme si el procedimiento que estoy siguiendo es correcto.
git pull -u
establece el seguimiento ascendente para la rama (o todas las ramas si se presiona más de una). Una vez que se establece, el seguimiento persiste. No hay razón para usarlo continuamente.Respuestas:
En general, me gusta fusionarme
master
en eldevelopment
primero para que, si hay algún conflicto, pueda resolver en ladevelopment
propia sucursal y mismaster
restos estén limpios.No hay mucha diferencia en los dos enfoques, pero a veces me he dado cuenta de que no quiero fusionar la rama
master
todavía, después de fusionarlos, o que todavía hay más trabajo por hacer antes de que estos puedan fusionarse , así que tiendo a dejarlomaster
intacto hasta el final.EDITAR: De los comentarios
Si desea realizar un seguimiento de quién hizo la fusión y cuándo, puede usar la
--no-ff
bandera mientras se fusiona para hacerlo. Esto generalmente es útil solo cuando se fusionadevelopment
con elmaster
(último paso), porque es posible que deba fusionarsemaster
endevelopment
(primer paso) varias veces en su flujo de trabajo, y crear un nodo de confirmación para estos puede no ser muy útil.fuente
--no-ff
necesita un explícito a la fusión para dominar para arreglar eso.--no-ff
sirve. :)git merge --no-ff development
solo para corregir el uso de @ elect.A->B->C
ser maestro, yA->X->Y
es tu rama de desarrollo. Si cambia parte de un archivo en elX
que podría haber tenido conflictos con un cambioA
, no será un conflicto, porqueA
es un antepasado deX
. Con respecto a los cambios perdidos, consulte stackoverflow.com/questions/7147680/… para recuperar cualquier cambio.Personalmente, mi enfoque es similar al tuyo, con algunas ramas más y algunos aplastamientos de confirmaciones cuando vuelven a dominar.
A uno de mis compañeros de trabajo no le gusta tener que cambiar tanto de rama y se queda en la rama de desarrollo con algo similar a lo siguiente, todo ejecutado desde la rama de desarrollo.
La primera línea se asegura de que tenga todos los commits 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 su flujo de trabajo básico esté un poco mal, pero esa es la esencia principal.
fuente
rebase
actualización de ladev
rama en lugar demerge
.Explicación desde abajo para los que vinieron aquí sin ningún conocimiento de ramas.
Comienza a crear una nueva sucursal de esta manera:
1) Clone el repositorio en su directorio local (o cree un nuevo repositorio):
2) Crear una nueva sucursal. Contendrá los últimos archivos de su repositorio de sucursal maestra
3) Cambia tu rama git actual a new_branch
4) Hacer codificación, confirmaciones, como de costumbre ...
5) Cuando finalice el trabajo en esta rama, combine con la rama "maestra":
Actualización: recomiendo usar GitKraken para esto para ver el árbol visual de cambios y ver mejor toda la lógica y confirmaciones.
fuente
release
rama de nuestradevelop
. Luego agregó un archivo de nota de lanzamiento y se comprometió. Luego terminó el lanzamiento que se fusiona con ambosmaster/develop
. pero mi rama maestra solo tenía una nota de lanzamiento recién agregada. no se actualizaron otros archivos durante las confirmaciones de desarrollo anteriores.Sería genial si puedes usar el flujo de trabajo de Git Flow . Se puede fusionar desarrollar rama en maestro fácilmente.
Lo que quieres hacer es seguir las instrucciones de git-flow mencionadas aquí:
PASOS:
git flow release start <version_number>
git flow release finish <version_number>
git push
para publicar los cambios en el maestro remoto .Para obtener más información, visite la página: http://danielkummer.github.io/git-flow-cheatsheet/
fuente
fuente
Sí, esto es correcto, pero parece un flujo de trabajo muy básico, donde solo está almacenando los cambios antes de que estén listos para la integración. Debería buscar flujos de trabajo más avanzados que git admita. Puede que te guste el enfoque de rama temática , que le permite trabajar en múltiples funciones en paralelo, o el enfoque de graduación que extiende un poco su flujo de trabajo actual.
fuente
Si está en Mac o Ubuntu, vaya a la carpeta de trabajo de la sucursal. En la terminal
supongamos que harisdev es el nombre de la sucursal.
si hay archivos no rastreados o no confirmados, recibirá un error y deberá confirmar o eliminar todos los archivos no rastreados o no confirmados.
Un último comando para eliminar la rama.
fuente
Paso 1
Cree y cambie a una nueva rama "dev", donde sus archivos git locales estén sincronizados con el remoto pero la rama "dev" aún no existe.
Paso 2
Realice los cambios en la rama "dev" (su actual si sigue el paso 1), confirme y empújelos a la rama remota "dev".
Paso 3
Combina tu rama "dev" en el "maestro".
fuente
Así es como lo hago habitualmente. Primero, asegúrese de estar listo para fusionar sus cambios en master.
git fetch
git checkout master
.git pull
git merge development
git push -u origin master
y ya está.Puede encontrar más información sobre la fusión de git en el artículo.
fuente
1) En el desarrollo de la sucursal, verifique el estado de git usando el siguiente comando:
No debe haber código no confirmado. Si es así, inserte su código en la rama Desarrollo:
2) En la rama Desarrollo, ejecute los siguientes dos comandos:
Empujará su código de sucursal de Desarrollo a la sucursal maestra.
fuente
-f
no es recomendado.Basado en @Sailesh y @DavidCulp:
El primer comando se asegurará de que todas las confirmaciones ascendentes se realicen en el maestro remoto, con una respuesta de Sailesh que no sucedería.
El segundo realizará una fusión y creará conflictos que luego podrá resolver.
Después de hacerlo, finalmente puede finalizar la compra de master para cambiar a master.
Luego, fusiona la rama de desarrollo con el maestro local. El indicador no-ff creará un nodo de confirmación en maestro para que se pueda rastrear toda la fusión.
Después de eso, puede comprometerse y empujar su fusión.
Este procedimiento asegurará que haya un compromiso de fusión de desarrollo a maestro que las personas puedan ver, luego, si miran la rama de desarrollo, pueden ver los compromisos individuales que ha realizado a esa rama durante su desarrollo.
Opcionalmente, puede modificar su confirmación de fusión antes de presionarla, si desea agregar un resumen de lo que se hizo en la rama de desarrollo.
EDITAR: mi respuesta original sugirió una
git merge master
que no hizo nada, es mejor hacerlogit merge FETCH_HEAD
después de buscar el origen / maestrofuente
Una vez que 'pagas' la rama de desarrollo, ...
fuente
Si está utilizando gerrit, los siguientes comandos funcionan perfectamente.
Puede guardar con el mensaje de confirmación predeterminado. Asegúrese de que se haya generado el ID de cambio. Puede usar el siguiente comando para asegurarse.
Luego presione con el siguiente comando.
Puede encontrar un mensaje de error como el siguiente.
Para resolver esto, el administrador del proyecto gerrit tiene que crear otra referencia en gerrit llamada 'refs / for / refs / heads / master' o 'refs / for / refs / heads / *' (que cubrirá todas las ramas en el futuro). A continuación, otorgue el permiso 'Push Merge Commit' a esta referencia y el permiso 'Enviar' si es necesario para enviar el GCR.
Ahora, intente nuevamente el comando push anterior, y debería funcionar.
Créditos
https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit
https://stackoverflow.com/a/21199818/3877642
fuente
Creo que la solución más fácil sería
Esto también conserva el historial de todas las ramas en uso.
fuente
fuente
pull
nuevamente. Además, no está claro qué valor agrega esta respuesta en comparación con las respuestas existentes.