web-dev-qa-db-fra.com

Comment fusionner une pull request sur le projet de quelqu'un d'autre dans git?

J'ai cloné ce dépôt sur mon ordinateur: https://github.com/derobins/wmd.git

Cependant, il y a plusieurs bogues, et il semble qu'un autre utilisateur les ait corrigés et émis des "demandes Pull" (je suppose que ce sont des demandes pour que leurs modifications soient validées?)

Est-il possible de fusionner ces modifications dans ma version locale?

EDIT: juste pour être clair, ce n'est pas mon référentiel. J'utilise l'éditeur WMD de derobins, mais il a plusieurs bugs que ces pull pulls prétendent corriger. J'ai cloné le dépôt sur Ubuntu (pas dans github) et espérais fusionner ces changements si possible.

54
DisgruntledGoat

(GitHub a documentation très complète sur la façon de traiter les demandes d'extraction.)

Essentiellement, vous souhaiterez ajouter une télécommande pour le référentiel de la personne qui a effectué les demandes d'extraction, par exemple:

git remote add helpful git://github.com/helpful-person/whatever.git

... puis récupérez leurs modifications dans des branches de suivi à distance:

git fetch helpful

... afin que vous ayez maintenant toutes les validations du référentiel GitHub de cette personne dans votre clone du référentiel en amont. Si vous regardez les commits supplémentaires dans cette demande de pull, vous pouvez:

  1. fusionner le dernier, par exemple git merge 75708aeab5
  2. choisir chacun de ces changements, par ex. git cherry-pick 2142db89, git cherry-pick 75708aeab5
  3. créer une branche locale pour continuer à travailler dessus, par ex. git checkout -b fix-for-issue3 75708aeab5
  4. etc.

Une alternative consiste à simplement cloner le référentiel du contributeur qui a fait les demandes d'extraction à la place, si c'est la même chose, mais pour ces correctifs.

55
Mark Longair

La réponse acceptée suggère de cloner ou d'ajouter une télécommande pour le référentiel de la personne qui a fait la demande d'extraction. Une autre façon plus propre et plus simple est d'utiliser cette commande

git pull https://github.com/otheruser/repo.git branchname

Par exemple, au moment de la rédaction, ghi a trois demandes de tirage ouvertes qui n'ont pas encore été fusionnées. C'est ce que j'ai fait pour les fusionner dans mon référentiel local.

# I want to make sure my master is in sync with the upstream master
git checkout -b merge-patches master
# first pull request
git pull --no-ff https://github.com/TiddoLangerak/ghi.git master
# second pull request
git pull --no-ff https://github.com/wayfare/ghi.git master

Notez que les deux demandes d'extraction ont été envoyées par le maître, c'est pourquoi j'ai tiré de leur branche master.

De cette façon, les autres référentiels ne sont pas ajoutés à vos télécommandes, ni vous devez les sélectionner ou les cloner localement.

30
Andrew-Dufresne