¿Cómo recrear el estado del file en conflicto con el command de finalización?

Tengo una sucursal de larga vida y hace un time resolví un gran conflicto de fusión. Ahora quiero volver a fusionar master en mi twig, pero tengo conflicto. Tengo Google un poco y encontré la function de rerere .

Pero cuando lo hago:

 git checkout --conflict=merge FileTheMergeConflictWas.ext 

No consigo nada.

¿Qué debo hacer para crear un file de fusión de resolución de conflictos y completar mi fusión actual con resolución automática?

Si su fusión ya está comprometida, en cierto sentido es demasiado tarde. El código networkingeterminado funciona registrando el conflicto en el momento en que ocurre el conflicto , y luego registra (por separado) la resolución del conflicto una vez que haya resuelto el conflicto.

Tanto el conflicto en sí mismo como tu resolución anterior ocurrieron en el pasado, cuando git rerere no estaba habilitado. Por lo tanto, para get git rerere para grabarlos ahora, debe retroceder en el time, habilitar git rerere , iniciar la fusión, get el conflicto, resolver el conflicto y luego regresar al presente.

Si tiene una máquina del time a mano, puede usar eso. 🙂 La mayoría de nosotros no, pero afortunadamente, ¡Git es una máquina del time! Especie de.

Simplemente active git rerere , luego revise la confirmación correcta usando el historial. Esto le dará una "CABEZA separada" con HEAD apuntando al compromiso que acaba de verificar. ¿Qué compromiso es el correcto? Bueno, el que estaba justo antes de fusionarse la última vez, por supuesto. Ese es el primer padre de la confirmación de fusión existente.

Entonces, ahora que tienes un HEAD aislado y estás en el commit correcto, haz la fusión, que tendrá conflictos:

 git merge <hash-id> 

¿Cuál es la identificación hash correcta para el compromiso de fusionar? Por qué, el que usaste cuando hiciste la fusión la última vez, por supuesto. Ese es el segundo padre de la confirmación de fusión existente.

Esta fusión, por supuesto, fallará debido al conflicto. Pero ahora el conflicto se registra porque usted, en el pasado con su CABEZA separada, está grabando esta vez. Ahora resuelve el conflicto de la misma manera que lo hiciste antes. Para ahorrar time, simplemente copie la resolución correcta del pasado. Esa resolución correcta está en la fusión que cometiste . Asi que:

 git show <merge-id>:path/to/conflict.ext > path/to/conflict.ext 

Ahora git add el file resuelto (repite todos los files según sea necesario) y ejecuta git commit para grabar la resolución final.

Ahora, viaje en el time de return al presente, abandonando la fusión que acabas de hacer. Ha cumplido su propósito, que era registrar el conflicto y la resolución:

 git checkout thebranch 

y ahora estás listo para ir.

Molestias menores

Si actualmente se encuentra en el medio de una combinación o una rebase en conflicto, tendrá que cancelarla ahora, luego usar la máquina de time Git para volver atrás y volver a fusionarse, luego reinicie su fusión conflictiva o rebase. (Si tiene mucho trabajo útil hecho, es posible que desee savelo primero; solo debe hacerlo en alguna parte y / o crear una twig o nombre de label que apunte a la confirmación actual, según sea necesario y apropiado, y solo luego abortar).

Gracias a torek . Completo los siguientes pasos mientras estoy en mi twig:

 git log --merges --oneline 30275e6 Merge branch 'master' into feature/5521_sign_cart_items c28e258 Merge branch 'master' into feature/5521_sign_cart_items f01e32c Merge branch 'master' into 5452_promocode 

Tome de la primera línea 30275e6 :

 $ git show 30275e6 commit 30275e60ae49f0139d8a0537dd8dc215b7fa2908 Merge: e8d66f0 81249af Author: Eugen Konkov <> Date: Tue Oct 25 19:57:16 2016 +0300 Merge branch 'master' into feature/5521_sign_cart_items 

Necesitamos esta información: Merge: e8d66f0 81249af . El e8d66f0 es el último commit en nuestra twig antes de que e8d66f0 master. 81249af es el último commit en master en ese momento. Mira qué estado tenía en ese momento:

 * b915f22 Code cleanup * 30275e6 Merge branch 'master' into feature/5521_sign_cart_items |\ | * 81249af 5663 fixed | * c4f02ae 5452 fixed * | e8d66f0 Code cleanup 

Ahora debería usar la máquina del time (gracias, por favor ):

 git checkout e8d66f0 # We are at detached head now git merge 81249af 

Aquí tengo conflicto. Ahora debería resolverlo como lo hice antes. Este es el resultado de mi fusión 30275e6

 git checkout 30275e6 FileTheMergeConflictWas.ext git commit 

Después de esto, vuelvo a mi twig y fusiono el master

 git checkout my_branch git merge master 

Se usará la resolución guardada. Buena suerte 😉