Mire su gráfico de compromiso (con gitk o un programa similar). Verá confirmaciones de la solicitud de extracción, y verá sus propias confirmaciones y una confirmación de fusión (si no fue una combinación de avance rápido). Solo tiene que encontrar el último de sus propios commits antes de la fusión y restablecer la rama a este commit.
(Si tiene el reflog de la rama, debería ser aún más fácil encontrar el commit antes de la fusión).
(Editar después de más información en los comentarios :)
Bien, veamos el gráfico:
Supongo que la última confirmación (más a la derecha) fue su fusión incorrecta por solicitud de extracción , que fusionó la línea azul que se ve aquí. Su última buena confirmación sería la anterior en la línea negra, aquí marcada en rojo:
Restablezca esta confirmación, y debería estar bien.
Esto significa que en su copia de trabajo local haga esto (después de asegurarse de que no tiene más cosas sin confirmar, por ejemplo, por git stash):
git checkout master
git reset --hard 7a62674ba3df0853c63539175197a16122a739ef
gitk
Ahora confirme que realmente está en la confirmación que marqué allí, y no verá ninguna de las cosas extraídas en su ascendencia.
git push -f origin master
(si su control remoto de github se llama origin
, de lo contrario cambie el nombre).
Ahora todo debería verse bien en Github también. Los commits aún estarán en su repositorio, pero ninguna rama podrá acceder a ellos, por lo que no debería causar ningún daño allí. (Y seguirán en el repositorio de RogerPaladin, por supuesto).
(Puede haber una forma específica de Github solo en la web para hacer lo mismo, pero no estoy muy familiarizado con Github y su sistema de gestión de solicitudes de extracción).
Tenga en cuenta que si alguien más podría haber extraído a su maestro con el commit incorrecto, entonces tienen el mismo problema que usted tiene actualmente y realmente no pueden contribuir de nuevo. antes de reiniciar a su nueva versión maestra.
Si es probable que esto haya sucedido, o simplemente desea evitar cualquier problema, use el git revert
comando en lugar de git reset
, para revertir los cambios con una nueva confirmación, en lugar de volver a establecer una anterior. (Algunas personas piensan que nunca debería reiniciar con las ramas publicadas). Vea otras respuestas a esta pregunta sobre cómo hacerlo.
Para el futuro:
Si solo desea algunos de los commits de la rama de RogerPaladin, considere usar en cherry-pick
lugar de merge
. O comuníquese con RogerPaladin para moverlos a una sucursal separada y enviar una nueva solicitud de extracción.