Comment supprimer les validations d'une pull request

105

J'ai fait une pull request mais après cela j'ai fait quelques commits sur le projet localement qui ont fini de polluer ma pull request, j'ai essayé de la supprimer mais sans aucune chance.

J'ai trouvé des questions similaires sur StackOverflow mais je ne peux pas appliquer ce qu'il y a dedans. C'est ma première demande d'extraction sur GitHub, donc c'est un peu étrange pour moi comment tout cela fonctionne.

Le commit mis en évidence est celui dont j'ai besoin pour conserver et supprimer tous les autres éléments. Cela devient le quatrième commit de l'histoire parce que je fais des fusions.

entrez la description de l'image ici

mon journal git entrez la description de l'image ici

Quelqu'un peut-il expliquer ce qui se passe et comment résoudre ce problème?

émerveillé
la source
2
Vous devez rebaser , et seulement "choisir" le commit "ajouté à partir de github" (c'est-à-dire commenter les lignes pour chaque autre commit)
Robbie Averill
1
rebase quelle branche sur quelle branche pouvez-vous s'il vous plaît ajouter plus d'explications.
humassé
what branch= la branche sur laquelle vous travaillez, onto what branch= la branche dans laquelle vous tirez la demande
Robbie Averill
J'ai expliqué ce que @Robbie Averill avait laissé entendre dans ma réponse. Il est étrange que personne n'ait écrit de réponse expliquant cela jusqu'à présent.
ferit le

Réponses:

109

Vous disposez de plusieurs techniques pour le faire.

Cet article - lisez la partie sur le retour vous expliquera en détail ce que nous voulons faire et comment le faire.

Voici la solution la plus simple à votre problème:

# Checkout the desired branch
git checkout <branch>

# Undo the desired commit
git revert <commit>

# Update the remote with the undo of the code
git push origin <branch>

La commande revert créera un nouveau commit avec l' annulation du commit d'origine.

CodeWizard
la source
2
Cela fonctionne-t-il même lorsque nous avons dérivé le projet d'une autre personne et que nous voulons supprimer certains commentaires dans la demande d'extraction?
Dr.jacky
110

Les gens n'aimeraient pas voir un mauvais commit et un commit de retour pour annuler les changements du mauvais commit. Cela pollue l'historique des engagements.

Voici un moyen simple de supprimer le mauvais commit au lieu d'annuler les modifications avec un commit de retour.

  1. git checkout my-pull-request-branch

  2. git rebase -i HEAD~n// où nest le nombre de derniers validations que vous souhaitez inclure dans le rebase interactif.

  3. Remplacez pickpar droppour les commits que vous souhaitez supprimer.
  4. Sauvegarder et quitter.
  5. git push --force
ferit
la source
8
cela a fonctionné pour moi comme un charme. J'ai eu un tas de commits qui n'auraient pas dû être dans le PR. Je l'ai juste rebasé interactif, abandonné ces commits et les
ai
1
Vous devriez quand même vous synchroniser avec le maître distant avant de démarrer un pr, non?
ferit le
5
Pour pousser je devais faire: git push origin HEAD:myBranch --force. Mais sinon super et utile.
ScottyBlades
4
Ceci est également utile lorsque vous souhaitez corriger un PR ouvert dans GitHub, il vous suffit de pouvoir faire une poussée forcée
Vladimir Hidalgo
1
@jorijnsmit ils signifient qu'après l'exécution git rebase -i HEAD~<n>, en haut du fichier, il y aura des <n>lignes de commits, chaque ligne contenant le texte pick <commit id>. Les commits sont par défaut pick, donc pour chaque commit que vous souhaitez supprimer, changez le texte pickendrop
Slim
6

Si vous supprimez un commit et que vous ne souhaitez pas conserver ses modifications, @ferit a une bonne solution.

Si vous souhaitez ajouter ce commit à la branche actuelle, mais que cela n'a pas de sens de faire partie du pr actuel, vous pouvez faire ce qui suit à la place:

  1. utilisation git rebase -i HEAD~n
  2. Échangez le commit que vous souhaitez supprimer vers la dernière position (la plus récente)
  3. Sauvegarder et quitter
  4. utilisez git reset HEAD^ --softpour annuler la validation des modifications et les remettre dans un état intermédiaire.
  5. utilisez git push --forcepour mettre à jour la branche distante sans votre commit supprimé.

Vous avez maintenant supprimé le commit de votre télécommande, mais vous aurez toujours les modifications localement.

John
la source
2

Alors faites ce qui suit,

Disons que le nom de votre branche est my_branch et cela a les commits supplémentaires.

  1. git checkout -b my_branch_with_extra_commits (Garder cette branche enregistrée sous un autre nom)
  2. gitk (Ouvre la console git)
  3. Recherchez le commit que vous souhaitez conserver. Copiez le SHA de ce commit dans un bloc-notes.
  4. git checkout my_branch
  5. gitk (Cela ouvrira la console git)
  6. Faites un clic droit sur le commit sur lequel vous souhaitez revenir (état avant vos modifications) et cliquez sur " reset branch to here"
  7. Fait une git pull --rebase origin branch_name_to _merge_to
  8. git cherry-pick <SHA you copied in step 3. >

Maintenant, regardez l'historique de commit de la branche locale et assurez-vous que tout semble bon.

Som Bhattacharyya
la source
0

C'est ce qui m'a aidé:

  1. Créez une nouvelle branche avec celle existante. Appelons l'existant branch_oldet le nouveau comme branch_new.

  2. Réinitialisez branch_newà un état stable, lorsque vous n'avez eu aucun problème de validation. Par exemple, pour le mettre au niveau de votre master local, procédez comme suit:

    git reset —hard master git push —force origin

  3. cherry-pickles commits de branch_olddansbranch_new

  4. git push
Sampada
la source