Comment mettre à jour une demande d'extraction à partir d'un dépôt fourchu?

592

J'ai donc d'abord bifurqué un dépôt, puis je me suis engagé sur ce dépôt fourchu. J'ai ensuite ouvert une demande de tirage. La demande d'extraction a répertorié toutes les modifications que je voulais.

Après avoir examiné ma demande de retrait, il y a eu un certain nombre de changements que le propriétaire du référentiel voulait que je fasse avant de l'accepter. J'ai apporté ces modifications dans ma fourchette, comment puis-je mettre à jour la demande de tirage avec ces modifications (ou n'est-ce pas ainsi que je devrais la gérer)?

stevebot
la source
7
@PaulDraper Je ne suis pas d'accord, cet utilisateur connaît déjà et présente diverses méthodes pour mettre à jour une demande de pull, et demande laquelle est la meilleure. Moi, par contre, je ne connaissais aucune méthode et me posais des questions sur leur existence. Comme le montre la popularité de cette question, c'est le cas pour de nombreux autres utilisateurs.
stevebot
6
Je pense que la popularité est due au fait que (1) c'est une très bonne question commune et (2) certains utilisateurs se sont retrouvés ici plutôt que là-bas. S'il avait été identifié à l'origine comme un doublon, ils auraient trouvé que l'autre question était la même et auraient répondu à leur question.
Paul Draper

Réponses:

586

Vous l'avez fait correctement. La demande d'extraction sera automatiquement mise à jour. Le processus est le suivant:

  1. Demande d'ouverture ouverte
  2. Validez les modifications en fonction des commentaires de votre référentiel local
  3. Poussez vers la branche appropriée de votre fourche

La demande de tirage ajoutera automatiquement les nouveaux commits au bas de la discussion de la demande de tirage (c'est-à-dire qu'elle est déjà là, faites défiler vers le bas! )

Shelhamer
la source
73
agréable! Je vérifiais partout mais la demande de tirage réelle. sa magie, magie noire, je ne la remettrai pas en question.
stevebot
57
C'est une bonne raison de travailler en agence. Si, par exemple, vous avez toujours poussé vers le master, vous pouvez involontairement ajouter à votre précédente demande de pull.
Brian Pan
3
Cela ne semble plus être le cas, même si c'était dans le passé. Voici un exemple de demande d'extraction que j'ai faite ( github.com/toopay/bootstrap-markdown/pull/167 ) par rapport à la branche elle-même ( github.com/mhuggins/bootstrap-markdown/commits/… ). Curieux de savoir comment faire cela depuis que le processus semble avoir changé.
Matt Huggins
1
GitHub vous dit en fait: "Ajoutez plus de commits en poussant vers la branche SolveWorldHunger sur ChangeTheWorldProject."
flow2k
1
La même chose ici - je ne vois pas de changements du repo forké dans le référentiel principal. Ressemble à un bug GitHub
andrfas
78

La mise à jour d'une demande d'extraction dans GitHub est aussi simple que de valider les modifications souhaitées dans la branche existante (qui a été utilisée avec la demande d'extraction), mais souvent, il est également nécessaire d'écraser les modifications en une seule validation:

git checkout yourbranch
git rebase -i origin/master

# Edit command names accordingly
  pick   1fc6c95 My pull request
  squash 6b2481b Hack hack - will be discarded
  squash dd1475d Also discarded

git push -f origin yourbranch

... et maintenant la demande de pull ne contient qu'un seul commit.


Liens connexes sur le rebasage:

jmu
la source
2
Upvote pour avoir mentionné rebase. Il permet de réduire le bruit dans l'historique des révisions.
stevebot
+11 (oui, je voulais que la clé soit répétée. Utiliser git rebase / pick / squash fonctionne très bien.
javadba
11
L'inconvénient de cette approche est que vous supprimez votre validation préalable. Cela signifie que si des commentaires sont formulés dans la demande d'extraction, ils seront perdus et disparaîtront avec le commit d'origine.
blowekamp
Dans Bitbucket, vous pouvez voir des commentaires sur les "versions précédentes" d'un fichier dans une demande de tirage. Bien qu'il serait bien de voir quelque chose comme dans Gerrit où vous corrigez les validations et pouvez voir l'historique complet avec des commentaires. Cela permet d'avoir une histoire et une traçabilité soignées lorsque vous pouvez revenir en arrière et voir la discussion complète autour de tout commit.
Love
36

Poussez simplement vers la branche référencée par la demande de tirage. Tant que la demande d'extraction est toujours ouverte, elle devrait être mise à jour automatiquement avec toutes les validations ajoutées.

igorw
la source
14

Je l'ai fait en utilisant les étapes ci-dessous:

  1. git reset --hard <commit key of the pull request>
  2. Est-ce que mes changements de code que je voulais faire
  3. git add
  4. git commit --amend
  5. git push -f origin <name of the remote branch of pull request>
Vikasdeep Singh
la source
1
Très bien, je préfère cette approche! GitHub cache même (mais conserve) les sections obsolètes du code et les commentaires associés. Il est bon de se rappeler que si la demande d'extraction contient plusieurs validations et que celle qui nécessite une correction n'est pas à l'extrémité de la branche, "git reset --hard" supprimera toutes les modifications validées après l'ID spécifié. J'ai eu une sauvegarde que j'ai appliquée manuellement. Ce n'est pas très pratique s'il y a plus d'un commit supplémentaire ...
Nagev
3

Si vous utilisez GitHub sous Windows :

  1. Apportez des modifications localement.
  2. Ouvrez GitHub, basculez vers les référentiels locaux, double-cliquez sur le référentiel.
  3. Basculez la branche (près du haut de la fenêtre) vers la branche à partir de laquelle vous avez créé la demande d'extraction (c'est-à-dire la branche de votre côté fourche de la comparaison)
  4. Devrait voir l'option d'entrer le commentaire de validation à droite et de valider les modifications apportées à votre dépôt local.
  5. Cliquez sur la synchronisation en haut, ce qui, entre autres, pousse votre validation du local vers votre fork distant sur GitHub.
  6. La demande de tirage sera mise à jour automatiquement avec les validations supplémentaires. C'est parce que la requête extraite représente un diff avec la branche de votre fork. Si vous accédez à la page de demande de tirage (celle où vous et les autres pouvez commenter votre demande de tirage), l'onglet Validation devrait contenir vos validations supplémentaires.

C'est pourquoi, avant de commencer à apporter vos propres modifications, vous devez créer une branche pour chaque ensemble de modifications que vous prévoyez de mettre dans une demande d'extraction. De cette façon, une fois que vous avez fait la demande d'extraction, vous pouvez ensuite créer une autre branche et continuer à travailler sur une autre tâche / fonctionnalité / correction de bogue sans affecter la demande d'extraction précédente.

AaronLS
la source