Comment puis-je obtenir une demande de retrait non fusionnée pour une branche que je ne possède pas?

j'ai besoin de tirer dans une pull request (qui n'a pas été traité dans le courant principal encore) dans le NServiceBus repo:

https://github.com/johnsimons/NServiceBus/commit/d8524d53094e8181716e771c1023e968132abc15

ce n'est évidemment pas mon repo, mais j'ai besoin des changements qui existent dans cette demande pull.

Quelle est la meilleure façon de le faire?

52
demandé sur TRiG 2011-07-19 11:16:23
la source

8 ответов

pour obtenir un pull dans votre dépôt:

git fetch [email protected]:jboss/jboss-common-beans.git refs/pull/4/head

alors faites ce que vous voulez avec FETCH_HEAD:

git checkout -b new-branch FETCH_HEAD
63
répondu wolfc 2014-09-07 18:39:31
la source
git pull origin pull/28/head

ou

git fetch origin pull/28/head:28
git checkout 28

puis-je tirer une demande de pull non-encore fusionnée?

42
répondu Steven Penny 2017-05-23 13:31:35
la source

Vous pouvez faire ceci:

1) Ajouter la télécommande amont:

git remote add upstream [email protected]:Particular/NServiceBus.git

2) Après cela, vous pouvez vérifier n'importe quelle demande de retrait à une nouvelle branche par son ID:

git fetch upstream pull/PULL_REQUEST_ID/head:NEW_BRANCH_NAME

alors vous aurez une branche appelée NEW_BRANCH_NAME contenant le code PR.

ajout d'un alias:

si vous faites cela aussi souvent que moi, vous pouvez configurer quelques alias pour cela. J'ai ce dans mon .gitconfig:

[alias]
    fetch-pr = "!f(){\
        [ -z \"\" ] && { echo Usage: git fetch-pr PULL_REQUEST_ID [REMOTE_NAME] [NEW_BRANCH_NAME]; exit 1; }; \
        remote=${2:-origin}; \
        branch=${3:-pr-}; \
        git fetch $remote \"pull//head:$branch\"; \
        }; f "
    pr = "!f(){\
        branch=${3:-pr-}; \
        git fetch-pr \"[email protected]\"; \
        git switch $branch; \
        }; f "

avec ce qui précède, je peux faire:

git fetch-pr 123              # fetch PR #123 into branch pr-123
git fetch-pr 123 some-branch  # fetch PR #123 into some-branch
git pr 123                    # fetch and switch to the branch
14
répondu elias 2018-02-12 14:57:38
la source
5
répondu David Phillips 2014-05-22 03:44:27
la source

pour les situations difficiles (surtout si vous n'avez pas de Git-repo vérifié), je pense que la manière la plus simple est d'appliquer un patch. Pour cela il suffit d'ouvrir la demande de pull sur github et Ajouter un ".patch" à l'URL, le télécharger et appliquer le patch.

exemple:

cd cordova-plugin-media
wget https://github.com/apache/cordova-plugin-media/pull/120.patch
patch -p1 < 120.patch
4
répondu cat 2016-11-17 14:56:10
la source

GitHub / hub

https://github.com/github/hub est un Helper GitHub CLI qui traite de cette utilisation et d'autres cas en utilisant magnifiquement des informations supplémentaires de l'API GitHub. Par exemple:

git clone https://github.com/github/hub
# Just copy paste the URL.
hub checkout https://github.com/github/hub/pull/970

résultat:

  • nous sommes maintenant sur une branche appelée <USERID>-<BRANCH_NAME> qui contient le PR.

    Notez le bon nom de la branche qui a été automatiquement réglé pour nous.

  • cette branche est réglée pour suivre la branche originale sur la fourche, i.e. .git/config contient:

    [branch "<USERID>-<BRANCH_NAME>"]
        remote = retronym
        merge = refs/heads/ticket/969
        rebase = true
    

    donc si d'autres commits obtenir poussé, nous pouvons git fetch eux directement.

installer hub sur Linux est actuellement une douleur si vous n'êtes pas familier avec Go, mais en vaut la peine. Sur Ubuntu 14.04, le Go sur les dépôts est trop vieux, donc GVM est la meilleure option:

bash < <(curl -LSs 'https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer')
. "$HOME/.gvm/scripts/gvm"
gvm install 'go1.4'
gvm use 'go1.4' --default
go get github.com/github/hub

j'ai aussi demandé à GitHub de nous donner une copie coller cheatsheet sur le Web UI à: https://github.com/isaacs/github/issues/449

3
la source

une fois que vous avez ajouté le repo en amont comme une télécommande en amont (comme @elias l'a fait remarquer):

$ git remote add upstream [email protected]:Particular/NServiceBus

vous pouvez configurer git pour récupérer les requêtes pull par défaut:

$ git config --local --add remote.upstream.fetch '+refs/pull/*/head:refs/remotes/upstream/pr/*'

alors, allons le chercher:

$ git fetch upstream
Fetching upstream
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/Particular/NServiceBus
 * [new ref]         refs/pull/1/head -> upstream/pr/1
 * [new ref]         refs/pull/2/head -> upstream/pr/2

et regardez:

$ git checkout pr/2
Branch pr/2 set up to track remote branch pr/2 from upstream.
Switched to a new branch 'pr/2'
1
répondu SummerBreeze 2017-07-04 10:02:03
la source

ci-dessous est de faire votre commande 'git fetch' pour récupérer toutes les requêtes de traction lors de l'exécution de "git fetch"

ajouter ci-dessous dans ~/.gitconfig

[remote "origin"]
fetch = +refs/pull-requests/*/from:refs/remotes/origin/pr/*

note la référence "refs / pull-requests/" a la convention de nommage stash, pour Git hub, vous pouvez avoir besoin d'un format différent

0
répondu Minnie Shi 2017-03-28 13:34:49
la source

Autres questions sur git github pull-request git-pull