Arreglando una twig maestra destrozada en el tenedor

Estaba trabajando en una request de extracción para un proyecto de fuente abierta, pero accidentalmente envié mis cambios a mi twig master local. Sin pensarlo lo suficiente, simplemente seguí adelante y lo empujé hasta mi origen y presenté mi twig principal como RP. Luego, más tarde, extraje el maestro de aguas arriba en mi maestro para poder arreglar los conflictos de fusión para mantener mi PR actualizado. Desde entonces, se han realizado más commits en upstream.

Entonces ahora tengo:

 upstream master: A - B - C ... H - I - J my fork master: A - B - X - Y 

Donde X fue la primera versión de mi PR e Y es una fusión de CH en X.

Así que ahora mi tenedor está ennetworkingado. No puedo trabajar en relaciones públicas no relacionadas sin iniciar una twig antes de B y luego llevar el maestro de flujo ascendente a esa twig cada vez. Y si mi PR original es rechazada o toma un año para recibir comentarios, me quedaré estancado en este estado indefinidamente.

¿Hay alguna opción para arreglar esto? ¿Tengo que destruir mi PR y mis X e Y los vuelvo a hacer manualmente (y si es así, cómo)? ¿O puedo rescatar mi PR de alguna manera y volver a sincronizar mi twig principal con la stream ascendente?

Lo que haría en este escenario se parece a esto:

Primero, revisa una nueva twig de tu master existente:

 git checkout -b master-preserve 

Luego, restablece tu master a upstream/master :

 git checkout master git fetch upstream git reset --hard upstream/master 

Ahora, crea otra twig:

 git checkout -b upstream-with-commits 

Y elige Cherry e X e Y sobre él:

 git cherry-pick XY # Replace with the appropriate commit IDs 

Luego, empuja esta twig hacia tu tenedor, ataca con un nudo el PR existente y abre uno nuevo contra el upstream-with-commits . Para volver a orderar el master tu tenedor, hazlo:

 git checkout master git push -f origin HEAD 

git push -f forzará un push, y sobrescribirá cualquier historial en origin/master . Tenga en count que, si otras personas han clonado desde su tenedor, puede causar problemas para ellos.

Ah, y no te olvides de eliminar master-preserve :

 git branch -D master-preserve 

Una vez que hayas cherry-pick cuidadosamente, ya no es necesario.