una tag remota ramas rama otra fusionar cambiar git

tag - ¿Cómo ''sobrescribo'', en lugar de ''fusionar'', una rama en otra rama en Git?



git merge branch to master (9)

He visto varias respuestas y ese es el único procedimiento que me permite solucionarlo sin ningún conflicto.

Si desea todos los cambios de branch_new en branch_old, entonces:

git checkout branch_new git merge -s ours branch_old git checkout branch_old git merge branch_new

una vez aplicados esos cuatro comandos, puede presionar el branch_old sin ningún problema

Tengo dos sucursales, email y staging . staging es la más reciente y ya no necesito los cambios anteriores en la rama de email , pero no quiero eliminarlos.

Así que solo quiero volcar todos los contenidos de la staging en staging en el email para que ambos apunten al mismo compromiso. ¿Es eso posible?


Las otras respuestas me dieron las pistas correctas, pero no me ayudaron por completo.

Esto es lo que funcionó para mí:

$ git checkout email $ git tag old-email-branch # This is optional $ git reset --hard staging $ $ # Using a custom commit message for the merge below $ git merge -m ''Merge -s our where _ours_ is the branch staging'' -s ours origin/email $ git push origin email

Sin el cuarto paso de fusionarse con la estrategia nuestra, el impulso se considera una actualización sin avance y será rechazado (por GitHub).


Otras respuestas parecían incompletas.
He intentado a continuación en su totalidad, y funcionó bien.

NOTA:
1. Haga una copia de su repositorio antes de intentar a continuación, para estar en el lado seguro.

Detalles:
1. Todo desarrollo ocurre en dev.
2. qa es la misma copia de dev
3. De vez en cuando, el código de desarrollo debe moverse / sobrescribirse a la rama qa

por lo que necesitamos sobrescribir la rama qa, desde la rama dev

Parte 1:
Con los comandos anteriores, el antiguo qa se ha actualizado a un nuevo desarrollador:

git checkout dev git merge -s ours qa git checkout qa git merge dev git push

Comentario automático para el último empuje da a continuación:

// Output: // *<MYNAME> Merge branch ''qa'' into dev,*

Este comentario se ve al revés, porque la secuencia anterior también se ve al revés

Parte 2:

A continuación se presentan los inesperados, nuevos mensajes locales en dev, los innecesarios.
Por lo tanto, tenemos que tirar, y hacer dev sin tocar.

git checkout dev // Output: // Switched to branch ''dev'' // Your branch is ahead of ''origin/dev'' by 15 commits. // (use "git push" to publish your local commits) git reset --hard origin/dev // Now we threw away the unexpected commits

Parte 3:
Verifique que todo sea como se espera:

git status // Output: // *On branch dev // Your branch is up-to-date with ''origin/dev''. // nothing to commit, working tree clean*

Eso es todo.
1. El antiguo qa ahora se sobrescribe con el nuevo código de rama dev.
2. local está limpio (el origen remoto / dev está intacto)


Puedes usar la estrategia de fusión ''nuestra'':

$ git checkout staging $ git merge -s ours email # Merge branches, but use our branch head


Qué tal si:

git branch -D email git checkout staging git checkout -b email git push origin email --force-with-lease


Quería unir dos ramas para que todos los contenidos en old_branch se actualicen con los contenidos de new_branch

Para mí esto funcionó a la perfección:

$ git checkout new_branch $ git merge -m ''merge message'' -s ours origin/old_branch $ git checkout old_branch $ git merge new_branch $ git push origin old_branch


Si eres como yo y no quieres lidiar con la fusión, puedes hacer los pasos anteriores, excepto usar force en lugar de fusionar, porque creará un rastro de papel de registro que distrae:

git checkout email git reset --hard staging git push origin email --force

Nota: Esto es solo si REALMENTE nunca quieres volver a ver las cosas en el correo electrónico.


Si solo desea que las dos ramas ''correo electrónico'' y ''almacenamiento provisional'' sean iguales, puede etiquetar la rama ''correo electrónico'', luego restablecer la rama ''correo electrónico'' a la ''almacenamiento provisional'' una:

$ git checkout email $ git tag old-email-branch $ git reset --hard staging

También puede cambiar la base de la rama de "puesta en escena" en la rama de "correo electrónico". Pero el resultado contendrá la modificación de las dos ramas.


git checkout email git merge -m "Making email same as staging disregarding any conflicts from email in the process" -s recursive -X theirs staging