Comment faire une demande de pull GitHub

283

Comment créer et / ou envoyer une pull request à un autre référentiel hébergé sur GitHub?

Tim Peterson
la source
2
N'est-ce pas suffisamment expliqué dans les pages d'aide de GitHub ?
lanzz
27
@lanzz Non, la page d'aide n'inclut pas quelques conseils utiles, que j'aurais aimé savoir avant de faire mes premières demandes de pull (voir ci-dessous).
VonC
9
@ianzz bien sûr, la page de Github est "suffisante", mais il existe de nombreuses façons d'apprendre. Ce que je me suis efforcé de faire était de faire un tutoriel de niveau débutant. Ce que j'ai trouvé manquant dans l'explication de Github, c'est que: 1) il n'était pas contenu dans une source (deux pages qui ne sont pas clairement liées), 2) n'était pas succinct (ces pages sont très longues, longues = écrasantes), 3) était non expliqué en termes humains dans les sections clés. Dans l'enseignement, il est toujours difficile pour un enseignant plus expérimenté de savoir ce qu'un débutant ne sait pas. Me mettre à la place du débutant était mon objectif en écrivant ceci.
tim peterson
12
Long peut signifier écrasant, ce qui peut signifier abandon = pas d' apprentissage. On peut "finir par comprendre le processus impliqué" par de nombreuses voies qui ne seraient évidemment pas l'une d'entre elles. Pour mettre fin à la guerre des flammes, pas besoin de répondre, je comprends d'où tu viens.
tim peterson
8
Vous faites une demande de tirage depuis votre propre fourche. Ce n'était certainement pas mon hypothèse d'origine.
Derek Illchuk

Réponses:

236

(En plus de la page officielle « Aide de GitHub« Utilisation des demandes de tirage » »,
voir également « Forking vs Branching dans GitHub », « Quelle est la différence entre l'origine et l'amont dans GitHub »)

Quelques conseils sur les demandes de traction:

En supposant que vous avez d'abord forké un repo , voici ce que vous devez faire dans ce fork que vous possédez:

  • créer une branche : isolez vos modifications dans une branche. Ne créez pas de demande d'extraction à partir de masterlaquelle vous pourriez être tenté d'accumuler et de mélanger plusieurs modifications à la fois.
  • rebaser cette branche : même si vous avez déjà fait une demande de tirage de cette branche, la rebasant au-dessus deorigin/master (en vous assurant que votre patch fonctionne toujours), la mise à jour de la demande de pull sera automatisée (pas besoin de cliquer sur quoi que ce soit)
  • mettez à jour cette branche : si votre demande de tirage est rejetée, vous pouvez simplement ajouter de nouveaux commits et / ou refaire complètement votre historique: cela réactivera votre demande de tirage existante.
  • "concentrer" cette branche : c.-à-d., rendre son sujet "serré", ne pas modifier des milliers de classes et l'application tout, seulement ajouter ou corriger une fonctionnalité bien définie, en gardant les changements petits .
  • supprimer cette branche : une fois accepté, vous pouvez supprimer en toute sécurité cette branche sur votre fork (et git remote prune origin). L'interface graphique GitHub vous proposera de supprimer votre branche dans votre page pull-request.

Remarque: pour écrire la Pull-Request elle-même, voir " Comment écrire la parfaite pull request " (janvier 2015, GitHub)


Mars 2016: Nouvelle option de bouton de fusion PR: voir " Github squash valide depuis l'interface web sur demande de pull après avoir commenté les commentaires? ".

écraser

Le responsable du dépôt peut choisir merge --squashces engagements PR.


Après une demande de tirage

Concernant le dernier point, depuis le 10 avril 2013, " Bouton de fusion repensé ", la branche est supprimée pour vous:

nouveau bouton de fusion

La suppression des branches après la fusion a également été simplifiée.
Au lieu de confirmer la suppression avec une étape supplémentaire, nous supprimons immédiatement la branche lorsque vous la supprimez et fournissons un lien pratique pour restaurer la branche au cas où vous en auriez besoin à nouveau .

Cela confirme la meilleure pratique de suppression de la branche après la fusion d'une demande d'extraction.


pull-request vs request-pull


e-notes pour "dépôt" (sic)

<humour>

Ce (pull request) n'est même pas défini correctement par GitHub!

Heureusement, une véritable organisation de nouvelles commerciales le saurait, et il y a une e-note pour remplacer le pull-replace par 'e-note' :

https://pbs.twimg.com/media/BT_5S-TCcAA-EF2.jpg:large

Donc , si vos prises en pension o besoins tory un e-note ... demander Fox Business . Ils sont au courant.

</humour>

VonC
la source
2
- @ VonC merci pour cela. Pourriez-vous fournir du code pour montrer en quoi ce que vous avez dit diffère de ce que j'ai dit? La décision branchvs. mastersemble être critique pour faire passer ma réponse / Github d'une solution théorique à quelque chose que l'on utiliserait réellement.
tim peterson
1
@timpeterson le fait que vous pouvez changer complètement l'historique dans cette branche, et qu'il mettra à jour la demande de pull automatiquement, est la clé ici: car une requête de pull doit être faite sur le dernier du projet en amont. Si ce dépôt en amont a de nouveaux commits, vous devez rebaser votre branche par dessus (en changeant l'historique de cette branche), et la repousser à votre fork: cela mettra à jour votre demande de pull (basée sur cette même branche) automatiquement.
VonC
4
Je ne comprends pas la partie rebasage. Qu'est-ce que ça fait? ( cette page sonne comme une fusée, mais je pense que ce n'est pas le cas). Quelle commande émettriez-vous à ce moment-là pour "rebaser"?
Camilo Martin
1
@CamiloMartin si vous êtes sur votre branche PR, alors ça git pull --rebase upstream/masterva bien.
VonC
1
@vikramvi master est une branche en commun avec le dépôt d'origine que vous avez créé. Cette branche doit toujours refléter le référentiel d'origine. Vous isolez vos correctifs dans une branche pour votre PR. Vous utilisez master uniquement comme un moyen de savoir ce qui se trouve dans le référentiel d'origine (et de rebaser votre branche de correctif par-dessus, pour assurer une fusion facile des demandes d'extraction)
VonC
202

Pour savoir comment faire une demande de pull, je viens de suivre deux pages d'aide distinctes sur Github (liées ci-dessous sous forme de puces). Les commandes de ligne de commande suivantes concernent la partie 1 . La partie 2 , la demande d'extraction réelle, est entièrement effectuée sur le site Web de Github.

$ git clone https://github.com/tim-peterson/dwolla-php.git
$ cd dwolla-php
$ git remote add upstream https://github.com/Dwolla/dwolla-php.git
$ git fetch upstream
// make your changes to this newly cloned, local repo 
$ git add .
$ git commit -m '1st commit to dwolla'
$ git push origin master
  • Partie 1 : Fork repo de quelqu'un: https://help.github.com/articles/fork-a-repo

    1. cliquez sur le bouton 'fork' du repo auquel vous souhaitez contribuer, dans ce cas: le repo PHP de Dwolla (Dwolla / dwolla-php)
    2. obtenez l'URL de votre fork nouvellement créé, dans ce cas: https://github.com/tim-peterson/dwolla-php.git (tim-peterson / dwolla-php)
    3. tapez la git clone->cd dwolla-php->git remote->git fetchséquence ci-dessus pour cloner votre fork quelque part dans votre ordinateur (c'est-à-dire, "copiez / collez" dessus, dans ce cas third_party TimPeterson$:) et synchronisez-le avec le référentiel maître (Dwolla / dwolla-php)
    4. apportez vos modifications à votre référentiel local
    5. tapez la git add->git commit->git pushséquence ci-dessus pour pousser vos modifications vers le référentiel distant, c'est-à-dire votre fork sur Github (tim-peterson / dwolla-php)
  • Partie 2 : faire une pull-request: https://help.github.com/articles/using-pull-requests

    1. allez sur la page Web de votre fork sur Github ( https://github.com/tim-peterson/dwolla-php )
    2. cliquez sur le bouton 'pull-request'
    3. donnez un nom à pull-request, remplissez les détails des modifications que vous avez apportées, cliquez sur le bouton soumettre.
    4. vous avez terminé!!
tim peterson
la source
4
- @ alexgray, j'ai laissé les invites bash, par exemple, Tims-MacBook-Pro:third_party TimPeterson$car il s'agit d'un tutoriel pour débutant et ces invites aident à orienter l'utilisateur.
tim peterson
1
Oui. Je vous remercie. Un exemple de travail que je peux suivre. Pourquoi n'avez-vous pas ce hub git?
Sevenearths
Après git fetch upstream, n'avez-vous pas besoin de fusionner les modifications en amont avec votre copie locale, en utilisant git checkout masteralors git merge upstream/master?
Sparhawk
@Sparhawk Non, vous n'avez pas besoin de fusionner vos modifications dans le maître qui réside dans votre fork. La demande d'extraction vers l'autre référentiel peut être basée uniquement en dehors de la succursale. Cependant, il est généralement recommandé de mettre à jour le maître de votre fork au fur et à mesure, de sorte que les modifications apportées au "vrai" référentiel et fréquemment ramenées dans la boucle de votre référentiel forké.
le
1
@HimanshuShekhar oui mais vous devez utiliser l'application de bureau github ou leur API. Le navigateur est plus simple pour moi.
tim peterson
70

Afin de faire une demande d'extraction, vous devez effectuer les étapes suivantes:

  1. Forkez un référentiel (vers lequel vous souhaitez faire une pull request). Cliquez simplement sur le bouton fork de la page du référentiel et vous aurez un référentiel github séparé précédé de votre nom d'utilisateur github.
  2. Clonez le référentiel sur votre ordinateur local. Le logiciel Github que vous avez installé sur votre machine locale peut le faire pour vous. Cliquez sur le bouton cloner à côté du nom du référentiel.
  3. Apportez des modifications locales / validez les fichiers
  4. synchroniser les changements
  5. accédez à votre référentiel forked github et cliquez sur le bouton vert "Comparer et réviser" à côté du bouton de branche. (Le bouton a une icône - pas de texte)
  6. Une nouvelle page s'ouvre, affichant vos modifications, puis cliquez sur le lien de demande d'extraction, qui enverra la demande au propriétaire d'origine du référentiel que vous avez créé.

Il m'a fallu un certain temps pour comprendre cela, j'espère que cela aidera quelqu'un.

Farhan
la source
3
Il n'était pas clair pour moi que vous deviez effectuer un dépôt avant de pouvoir faire une demande de pull. J'ai pensé qu'un commit poussé irait simplement à une sorte de branche en attente qui a un accès public en écriture, puis fusionné à partir de là. Merci!
Chris Arena
16

J'ai lancé un projet pour aider les gens à faire leur première demande d'extraction GitHub. Vous pouvez faire le tutoriel pratique pour faire votre premier PR ici

Le flux de travail est aussi simple que

  • Fork le repo dans github
  • Obtenez l'url du clone en cliquant sur le bouton repo du clone
  • Accédez au terminal et exécutez git clone <clone url you copied earlier>
  • Créez une branche pour les modifications que vous apportez git checkout -b branch-name
  • Apportez les modifications nécessaires
  • Validez vos modifications git commit
  • Poussez vos modifications sur votre fork sur GitHub git push origin branch-name
  • Accédez à votre fourchette sur GitHub pour voir un Compare and pull requestbouton
  • Cliquez dessus et donnez les détails nécessaires
sudo bangbang
la source
15

Pour ceux d'entre nous qui ont un compte github.com, mais qui n'obtiennent un mauvais message d'erreur que lorsque nous tapons "git" dans la ligne de commande, voici comment faire tout cela dans votre navigateur :)

  1. Comme Tim et Farhan ont écrit: Créez votre propre copie du projet: Étape 1: Fourche
  2. Après quelques secondes, vous serez redirigé vers votre propre copie forkée du projet: Étape 2
  3. Accédez au (x) fichier (s) que vous devez modifier et cliquez sur "Modifier ce fichier" dans la barre d'outils: Étape 3: modifier un fichier
  4. Après l'édition, écrivez quelques mots décrivant les changements puis "Validez les changements", tout aussi bien dans la branche master (puisque ce n'est que votre propre copie et non le projet "principal"). Étape 4: valider les modifications
  5. Répétez les étapes 3 et 4 pour tous les fichiers que vous devez modifier, puis revenez à la racine de votre copie du projet. Là, cliquez sur le bouton vert "Comparer, réviser ...": Étape 5: Commencez à soumettre
  6. Enfin, cliquez sur "Créer une demande de tirage" .. puis sur "Créer une demande de tirage" à nouveau après avoir revérifié le titre et la description de votre demande: entrez la description de l'image ici
Sphinxxx
la source
3

J'ai suivi les instructions de tim peterson mais j'ai créé une branche locale pour mes changements. Cependant, après avoir poussé, je ne voyais pas la nouvelle branche dans GitHub. La solution était d'ajouter -u à ​​la commande push:

git push -u origin <branch>
tamalet
la source
avez-vous remarqué les 2 noms d'utilisateur dans l'url ci-dessus? le premier est tim-petersonle 2e estDwolla
tim peterson
3
En outre, c'est mieux comme commentaire à ma réponse. Vous pourriez obtenir des votes négatifs.
tim peterson
1

J'ai écrit un programme bash qui fait tout le travail de mise en place d'une branche PR pour vous. Il effectue le forking si nécessaire, la synchronisation avec l'amont, la configuration de la télécommande en amont, etc. et il vous suffit de valider vos modifications, de pousser et de soumettre un PR.

Voici comment vous l'exécutez:

github-make-pr-branch ssh your-github-username orig_repo_user orig_repo_name new-feature

Vous trouverez le programme ici et son référentiel comprend également un guide étape par étape pour effectuer le même processus manuellement si vous souhaitez comprendre comment il fonctionne, ainsi que des informations supplémentaires sur la façon de maintenir votre branche de fonctionnalités à jour. rendez-vous avec le maître en amont et d'autres informations utiles.

stason
la source
0

La demande d'extraction GitHub la plus simple provient de l'interface Web sans utiliser git.

  1. Enregistrez un compte GitHub, connectez-vous puis accédez à la page du référentiel que vous souhaitez modifier.
  2. Cliquez sur l' icône en forme de crayon ,

    recherchez du texte à proximité de l'emplacement, apportez les modifications souhaitées, puis prévisualisez-les pour confirmer. Donnez au changement proposé une description de 50 caractères maximum et éventuellement une description détaillée, puis cliquez sur le bouton Proposer un changement de fichier .

  3. Si vous lisez ceci, vous n'aurez pas accès en écriture au référentiel (dossiers de projet), donc GitHub créera une copie du référentiel (en fait une branche) dans votre compte. Cliquez sur le bouton Créer une demande d'extraction .

  4. Donnez une description à la demande d'extraction et ajoutez des commentaires, puis cliquez sur le bouton Créer une demande d'extraction .
fil volant
la source