web-dev-qa-db-fra.com

Comment appliquer des demandes d'extraction en amont non fusionnées d'autres fourches dans ma fourche?

Un projet sur GitHub dont j'ai une fourche a une nouvelle demande de traction que je veux insérer dans ma fourche que l'auteur n'a pas encore intégrée.

Existe-t-il un moyen simple d'appliquer la demande d'extraction d'autres fourches dans ma fourche? Y a-t-il autre chose ici qui me manque?

434
leek

Vous pouvez le faire manuellement assez facilement:

  • ajoutez l'autre fork comme télécommande de votre repo:

    git remote add otherfork git://github.com/request-author/project.git
    
  • aller chercher les engagements de son repo

    git fetch otherfork
    
  • Vous avez alors deux options pour appliquer la demande de tirage (si vous ne voulez pas choisir le choix 1.)

    1. Si vous ne vous souciez pas d'appliquer également les éventuels commits qui ont été ajoutés entre l'origine et la demande d'extraction, vous pouvez simplement rebaser la branche sur laquelle la demande d'extraction a été formée.

      git rebase master otherfork/pullrequest-branch
      
    2. Si vous ne voulez que les commits dans la demande d'extraction, identifiez leur SHA1 et faites-le.

      git cherry-pick <first-SHA1> <second-SHA1> <etc.>
      
266
CharlesB

Mise à jour: via la page Web

Vous pouvez également le faire via la page Web github.

Je suppose que vous devriez déjà avoir un fork (MyFork) du référentiel commun (BaseRepo) qui contient la demande d'extraction en attente d'un fork (OtherFork) qui vous intéresse.

  1. Naviguez jusqu'au fork (OtherFork) qui a initié la demande de tirage que vous souhaitez introduire dans votre fork (MyFork)
  2. Accédez à la page des demandes d'extraction de OtherFork
  3. Cliquez sur nouvelle demande de tirage
  4. Les demandes de tirage en attente doivent être offertes. N'oubliez pas de sélectionner également la branche OtherFork appropriée. Sélectionnez sur le côté gauche la base de votre fourche pour votre fourche (MyFork) (IMPORTANT).
  5. Maintenant, l'option de View pull request devrait être remplacée par Create pull request. Cliquez ici.

Vous devez maintenant avoir une demande de retrait en attente dans votre fork (MyFork), que vous pouvez simplement accepter.

254
Hotschke

Comme Tekkub l'a dit précédemment, vous pouvez simplement tirer la branche directement. La plupart du temps, avec GitHub, la branche est simplement "maîtresse" du fork de l'utilisateur demandeur du projet.

Exemple: git pull https://github.com/USER/PROJECT/ BRANCH

68
SciPhi

Quelques informations plus détaillées qui ont fonctionné pour moi.

Mon fichier .git/config pour le repo forké ressemble à ceci:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = false
[remote "Origin"]
        url = [email protected]:litzinger/angular-carousel.git
        fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
        remote = Origin
        merge = refs/heads/master
        rebase = true
[remote "source"]
        url = git://github.com/revolunet/angular-carousel.git
        fetch = +refs/heads/*:refs/remotes/source/*
        fetch = +refs/pull/*/head:refs/remotes/Origin/pr/*

Puis lancez "git fetch source", qui répertorie ensuite toutes les demandes d'extraction du référentiel forké.

 * [new ref]         refs/pull/54/head -> Origin/pr/54
 * [new ref]         refs/pull/67/head -> Origin/pr/67
 * [new ref]         refs/pull/69/head -> Origin/pr/69
 * [new ref]         refs/pull/71/head -> Origin/pr/71

Et ensuite, pour fusionner dans une demande de tir spécifique, exécutez "git merge master Origin/pr/67"

20
Brian Litzinger

Les demandes d'extraction pour le projet peuvent provenir de nombreux auteurs (forks), et vous ne souhaiterez probablement pas une télécommande distincte pour chaque fork. En outre, vous ne voulez pas émettre d'hypothèses sur la branche utilisée par l'auteur lors de la soumission de la demande d'extraction, ni sur ce qui pourrait se trouver dans la branche principale de l'auteur. Il est donc préférable de référencer la demande d'extraction telle qu'elle apparaît dans le référentiel en amont plutôt que telle qu'elle apparaît dans les autres fourches.

Étape 1:

git remote add upstream <url>

Vous avez probablement déjà effectué cette étape, mais si vous ne le faites pas, vous souhaiterez une définition distante pour le projet en amont. L'URL est l'URL de clone du projet que vous avez créé. Plus d'infos sur Configuration d'une télécommande pour un fork et Synchroniser un fork . upstream est le nom que vous donnez à la télécommande. Bien que cela puisse être n'importe quoi, upstream est le nom conventionnel.

Étape 2:

git pull upstream refs/pull/{id}/head

... où {id} est le numéro de la demande d'extraction. upstream est le nom de la télécommande à utiliser, c'est-à-dire "en amont" si vous avez suivi l'étape 1 exactement. Il peut également s'agir d'une URL, auquel cas vous pouvez ignorer l'étape 1.

Étape 3:

Tapez un message de validation pour la validation de fusion. Vous pouvez conserver la valeur par défaut, bien que je recommande de fournir un résumé Nice en une ligne avec le numéro de demande d'extraction, le problème qu'il corrige et une brève description:

Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions
19
jbyler

Ce que je ferais est la suivante.

git checkout master
git remote add #NAME# #ADDRESS TO REPO#
git fetch #USERNAME#
git checkout -b test_fork
git rebase #NAME#/#BRANCH#

J'ai maintenant fusionné les modifications dans une branche de test, nommée test_fork. Pour que les changements ne salissent pas mon arbre.

Vous pouvez éventuellement utiliser le choix de recherche comme décrit ci-dessus pour choisir un commit particulier si cela est préférable.

Bon voyage :)

9
MindTooth

J'utilise un script dandy pratique pour cela. Je lance le script en tapant:

git prfetch upstream

et il obtient toutes les demandes d'extraction de la fourche en amont.

Pour créer le script, créez un fichier ~/bin/git-prfetch.

Le fichier doit contenir les éléments suivants:

#!/bin/bash

if [ -z "$1" ]; then
    echo "Please supply the name of a remote to get pull requests from."
    exit 1
fi

git fetch $1 +refs/heads/\*:refs/remotes/$1/\* +refs/pull/\*/head:refs/remotes/$1/pr/\*

Assurez-vous que votre chemin inclut le script en définissant:

export PATH="$HOME/bin:$PATH"

Vous pouvez ajouter ce fichier à ~/.bashrc pour rendre la modification permanente.

Maintenant, assurez-vous d’ajouter la fourche à partir de laquelle vous voulez obtenir les demandes de tirage:

git remote add upstream https://github.com/user/repo.git

Puis

git prfetch upstream
0
Richard