rebase conflicted, commits fusionados en git

Acabo de terminar de desarrollar una nueva característica en su propia twig ( feature twig) que consiste en una docena de commits. Después de ejecutar todas mis testings, fusioné esta twig en master y resolví muchos conflictos de fusión. El process tomó bastante time. Solo después de terminar de fusionarme, me doy count de que nunca volví a basar ninguno de los commits en la twig de feature , que generalmente es mi práctica.

En resumen, ahora tengo:

 (feature) BCD (master) A-/ \-E (merge commit in master) 

pero quiero tener:

  F A-/ \-D 

donde F = B + C + D "aplastado" juntos.

La forma en que iba sobre esto era crear otra twig master_prime desde el master comenzando en commit A Luego, cambie a la twig de feature y logre todos los aplastamientos de confirmación que deseo. Finalmente, combine la feature en master_prime . El único problema es que tendré que resolver todos los conflictos de fusión nuevamente. ¿Hay alguna manera de poder reproducir / seleccionar la combinación E confirmación para que esto no sea necesario?

También intenté git rebase --preserve-merges -i <A> así como git rebase -i <A> , lo que no me permite volver a establecer la base de los commits que quiero ni hacer que lidie con los conflictos de fusión nuevamente, respectivamente.

Usa git read-tree para reutilizar tu resolución de los conflictos de fusión.

Supongo que combinó la feature con el master . Si fusionó el master en la feature , use master^2 lugar de master^ (y viceversa).

  1. Haga una copy de security de su compromiso de fusión.

     git branch merge-backup master 
  2. Aplaste los commits en la feature . Asegúrate de no cambiar nada accidentalmente.

     git checkout feature # ... squash the commits ... git diff master^2 
  3. Deshazte de la antigua confluencia de fusión.

     git checkout master git reset --hard master^ 
  4. Combina la twig de entidades aplastadas en master , reutilizando la resolución de conflictos anterior.

     git merge feature git read-tree --reset -u merge-backup git commit 
  5. Si está satisfecho con los resultados, elimine la twig de respaldo.

     git branch -D merge-backup 

Creo que probablemente haya varias maneras de lograr lo que quieres, pero primero un par de cosas:

1) no necesitas una nueva twig principal si no quieres. Puede usar git reset para cambiar el punto de la twig maestra actual a A o algo sin necesidad de una nueva twig nombrada. (También puedes crear tu nuevo master_prime , hacer lo que quieras para llegar al "mejor lugar de la tierra" y cambiar el nombre del master a master_old y cambiar el nombre de master_prime al master .

Pero eso es todo, además del punto, porque no es realmente lo que estás preguntando.

Lo que desea es la característica de twig de feature con todos los cambios necesarios de A a D en ella. Y … los cambios necesarios para hacer la fusión. En este punto, es probable que desee rebase, ya que aún será un dolor. Pero puede aplastar y copyr las ediciones de fusión en su lugar (mediante el reset lugar de una nueva twig que queda como ejercicio para el lector):

 git checkout A git checkout -b feature2 git cherry-pick B..D ... squash away here ... git cherry-pick E # copies the merge pain in git checkout master git merge feature2 

Creo