Hacer la twig principal limpia después de hacer una fusión de squash por error

Nuestro equipo ha estado trabajando en el develop , haciendo relaciones públicas ocasionales en el master . Hace un par de meses, hicimos un PR y utilizamos Squash Merge (falta de conocimiento sobre cuáles serán los efectos) para lograr que los cambios de develop en master . Este compromiso ha sido empujado. El equipo ha continuado trabajando en el develop durante unos meses y ahora tenemos más de 400 compromisos para develop . Según la comparación, el master tiene un compromiso que no está en develop : la fusión de squash.

Esto es lo que entendí cómo se ve nuestro tree:

 ---X---------------S <-- master / \ - ---A---B---C-----D1---D2 ... Dn <-- develop 

S es la combinación de squash de A , B y C

Ahora cuando tratamos de fusionar nos develop en master (o al revés) tenemos muchos conflictos porque ha habido cambios en ambas twigs (aunque comenzando con los mismos cambios).

¿Cuál es una buena manera de resolver esto? ¿Hay alguna manera de "deshacer" la fusión de squash y volver a un estado "bueno" (por ejemplo, X )?

Dado:

 -M1--X---------------S <-- master / \ -D1 ---A---B---C-- <-- develop 

Podrías hacerlo:

  • Verifica el compromiso antes de la calabaza
  • Realiza la fusión, sin aplastar
  • Cherry-pick comete lo que sucedió después de la calabaza

Deberías terminar con el mismo contenido que tienes ahora, pero el squash reemplazado con una combinación.

Es decir:

 git checkout -b master-new M1 git merge D1 git cherry-pick S 

Después de esto, si el master-new ve bien, entonces podrías hacer una copy de security del master y replacelo con master-new . (Y reza para que a nadie le importe que hayas reescrito la historia).