Git rebase y push error

Tengo un problema, y ​​no estoy seguro de qué hacer. Todavía estoy aprendiendo git, así que espero que puedan ayudarme.

Así que estoy trabajando en un repository bastante activo. He clonado el repository, y para sugerir algunos cambios, tengo que publicar requestes de extracción.

Mi configuration es la siguiente:

Tengo una twig principal que actualizo desde la parte superior (establecida en el maestro de repository principal) con una rebase.

Para cada nuevo problema, creo una nueva twig que modifico, presiono a github y la aplico como PR. Esto funcionó muy bien hasta que quise actualizar mi twig local de problemas con el nuevo maestro.

Para hacer esto hice una fetch upstream y rebase en mi maestro local, y una fusión de maestro en mi sucursal. Luego quise impulsar mis cambios, pero recibí este error:

 Updates were rejected because the tip of your current branch is behind 

Después de ver las respuestas aquí, decidí ejecutar git pull --rebase junto con git push para aplicar los cambios en la twig remota de problemas.

Fue solo después de esto que me di count de lo que había hecho. Como hubo bastantes commits para el maestro principal, el historial de commit está lleno de commits que no he hecho.

¿Hay alguna manera de arreglar esto ahora? Sería genial si pudiera volver a establecer una base de mi twig de temas completa sobre el maestro más nuevo, pero tengo miedo de romper algo en el path.

Suponiendo que nadie más está trabajando en su twig de problemas, puede simplemente reescribir el historial y forzarlo a empujarlo.

A veces desennetworkingar lo que sucedió y por qué es más esfuerzo que simplemente recrear su twig desde cero. git cherry-pick es tu amigo: así es como puedes crear una nueva twig local de problemas con solo commits necesarios.

Paso a paso, suponiendo que su twig de problema se llame my_issue :

1. solo para copy de security, para mantener la versión desorderada, haga una copy de ella:

 git checkout -b my_issue_messy 

2. Regrese a su twig my_issue para limpiarlo:

 git checkout my_issue 

3. Obtenga confirmaciones relevantes.

Anotar las confirmaciones que desea conservar: mire el logging de una manera más legible: git log --oneline --graph , copie los SHA de las correcciones de problemas. Supongamos que los SHA de compromiso son 1d1f76f , f63193d y d9f2fad por el bien del ejemplo.

4. actualice su control remoto:

 git fetch origin 

5. restablecer my_issue a la última my_issue maestra actual:

 git reset --hard origin/master 

6. Elige tus compromisos de una en una:

 git cherry-pick 1d1f76f git cherry-pick f63193d git cherry-pick d9f2fad 

¡Auge! Ahora su sucursal proviene del estado del maestro actual y solo tiene sus confirmaciones relevantes. ¿Qué hay de la twig remota? Se quejará ya que no se dará count de que los commits son duplicates (el método de selección cambió el time de la confirmación y le dio un nuevo SHA). Que la --force esté contigo:

 git push origin my_issue --force 

Si todo está bien y todos están contentos, puede eliminar su sucursal my_issue_messy local.