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