GIT Overwrite branch con master

33

Tengo una antigua rama de desarrollo que está completamente desactualizada. No quiero eliminarlo, pero quiero reemplazar su contenido por completo con la rama maestra. Es decir, quiero dev_branch = master

Lo intenté:

git merge -s ours dev_branch

Aunque no funcionó ...

Cornwell
fuente

Respuestas:

53

Si desea todos los cambios desde masteradentro dev_branch, entonces:

git checkout dev_branch
git reset --hard master

Esto solo funciona si otras personas no han clonado el repositorio.

Si ya dev_branchpresionó un control remoto, debe hacer lo siguiente:

git push --force

Para forzar-empujar al control remoto. Advertencia: ¡Esto romperá la historia de la rama para las personas que la clonaron antes! Luego, otras personas tendrán que hacer un git pull --rebasea dev_branchpara obtener los cambios.


También puede cambiar el nombre de la rama de desarrollo a algo antiguo y luego crear una nueva rama mastercon el mismo nombre:

git branch -m dev_branch old_dev_branch
git branch -m master dev_branch

O utilice la oursestrategia, no estoy seguro de por qué no funcionaría para usted:

git checkout master
git merge -s ours dev_branch
git checkout dev_branch
git merge master
slhck
fuente
Con la solución de cambio de nombre, creo que encontrará que ahora no puede empujar dev_branchal origen (si tenía una), y que ya no tendrá una mastersucursal localmente.
aidan
Gracias @slhck! Por alguna razón, mi rama de escenario no se actualizaba después de hacer una fusión normal. Seguía diciendo que mi rama del escenario estaba actualizada. Usar la estrategia "nuestra" resolvió esto para mí.
Slick Shinobi
el nuestro solo afectaría a los fragmentos en conflicto, pero él quiere renovar por completo la rama, ¡no solo los conflictos! (esto es al menos lo que necesito hacer y por qué encontré esta Q) - ¡Iré por el cambio de nombre!
Martin Meeser el