Regardez votre graphe de commit (avec gitk ou un programme similaire). Vous verrez des validations de la demande d'extraction, et vous verrez vos propres validations et une validation de fusion (s'il ne s'agissait pas d'une fusion à avance rapide). Il vous suffit de trouver le dernier de vos propres commits avant la fusion et de réinitialiser la branche sur ce commit.
(Si vous avez le reflog de la branche, il devrait être encore plus facile de trouver le commit avant la fusion.)
(Modifier après plus d'informations dans les commentaires :)
D'accord, regardons le graphique:
Je suppose que le dernier commit (le plus à droite) était votre mauvaise fusion par pull request , qui a fusionné la ligne bleue vue ici. Votre dernier bon commit serait celui avant sur la ligne noire, ici marqué en rouge:
Réinitialisez ce commit, et tout devrait bien se passer.
Cela signifie que, dans votre copie de travail locale, faites ceci (après vous être assuré que vous n'avez plus de choses non validées, par exemple par git stash):
git checkout master
git reset --hard 7a62674ba3df0853c63539175197a16122a739ef
gitk
Maintenant, confirmez que vous êtes vraiment sur le commit que j'ai marqué là-bas, et vous ne verrez aucun des éléments tirés dans son ascendance.
git push -f origin master
(si votre télécommande github est nommée origin
- sinon changez le nom).
Maintenant, tout devrait également avoir l'air correct sur github. Les commits seront toujours dans votre référentiel, mais ne seront accessibles par aucune branche, donc ne devraient pas y faire de mal. (Et ils seront toujours sur le référentiel de RogerPaladin, bien sûr.)
(Il peut y avoir un moyen spécifique à Github de faire la même chose sur le Web, mais je ne suis pas trop familier avec Github et son système de gestion des demandes d'extraction.)
Notez que si quelqu'un d'autre a déjà retiré votre master avec le mauvais commit, il a alors le même problème que vous avez actuellement et ne peut pas vraiment contribuer. avant de réinitialiser votre nouvelle version principale.
S'il est probable que cela se soit produit, ou si vous souhaitez simplement éviter tout problème, utilisez la git revert
commande à la place de git reset
, pour annuler les modifications avec un nouveau commit, au lieu de revenir à un ancien. (Certaines personnes pensent que vous ne devriez jamais effectuer de réinitialisation avec les branches publiées.) Consultez les autres réponses à cette question pour savoir comment procéder.
Pour le futur:
Si vous ne voulez que certains des commits de la branche de RogerPaladin, envisagez d'utiliser à la cherry-pick
place de merge
. Ou communiquez avec RogerPaladin pour les déplacer vers une succursale distincte et envoyer une nouvelle demande d'extraction.