web-dev-qa-db-fra.com

Comment supprimer les commits d'une demande d'extraction

J'ai fait une demande de tirage mais après cela, je me suis engagé localement dans le projet, ce qui a fini par polluer ma demande de tirage. J'ai essayé de l'enlever, mais sans succès.

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

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

enter image description here

mon journal git enter image description here

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

70
humazed

Vous avez plusieurs techniques pour le faire.

Cet article - lisez la partie sur le retour 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 une nouvelle validation avec l'annulation de la validation d'origine.

75
CodeWizard

Les gens n'aimeraient pas voir un commit incorrect et un commit annuler pour annuler les modifications du commit erroné. Cela pollue l'histoire commise.

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ù n est le nombre de dernières validations que vous souhaitez inclure dans la base interactive.

  3. Remplacez pick par drop pour les commits que vous souhaitez supprimer.
  4. Sauvegarder et quitter.
  5. git Push --force
52
ferit

Alors faites ce qui suit,

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

  1. git checkout -b my_branch_with_extra_commits (Conserver cette branche sous un nom différent)
  2. gitk (ouvre la console git)
  3. Cherchez le commit que vous voulez garder. 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 voulez revenir (Etat avant vos modifications) et cliquez sur "reset branch to here"
  7. Faites un git pull --rebase Origin branch_name_to _merge_to
  8. git cherry-pick <SHA you copied in step 3. >

Examinez maintenant l’historique des commissions de la branche locale et assurez-vous que tout semble bon.

1
Som Bhattacharyya

Si vous supprimez un commit et que vous ne voulez 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 plutôt procéder comme suit:

  1. utiliser git rebase -i HEAD~n
  2. Échangez le commit que vous voulez supprimer en dernière position (la plus récente)
  3. Sauvegarder et quitter
  4. utilisez git reset HEAD^ --soft pour annuler la validation des modifications et les récupérer dans un état échelonné.
  5. utilisez git Push --force pour mettre à jour la branche distante sans votre commit supprimé.

Maintenant, vous aurez supprimé le commit de votre télécommande, mais les modifications auront toujours lieu localement.

0
John