80 votes

Comment puis-je récupérer une demande de retrait non fusionnée pour une branche qui ne m'appartient pas ?

J'ai besoin d'intégrer une demande spécifique (qui n'a pas encore été traitée dans le flux principal) dans le dépôt NServiceBus :

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 de retrait.

Quelle est la meilleure façon de procéder ?

76voto

wolfc Points 653

Pour récupérer un pull dans votre dépôt :

git fetch git@github.com:jboss/jboss-common-beans.git refs/pull/4/head

Ensuite, faites ce que vous voulez avec FETCH_HEAD :

git checkout -b new-branch FETCH_HEAD

75voto

Steven Penny Points 18523
git pull origin pull/28/head

Ou

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

Puis-je tirer une demande de modification qui n'a pas encore été fusionnée ?

25voto

elias Points 6255

Vous pouvez le faire :

1) Ajouter la télécommande en amont :

git remote add upstream git@github.com:Particular/NServiceBus.git

2) Après cela, vous pouvez extraire toute demande de pull vers une nouvelle branche en fonction de son ID :

git fetch upstream pull/PULL_REQUEST_ID/head:NEW_BRANCH_NAME

Vous aurez alors une branche nommée NEW_BRANCH_NAME contenant le code PR.

Ajout d'un alias :

Si vous faites ça aussi souvent que moi, vous pourriez vouloir configurer quelques pseudonymes pour cela. J'ai ceci dans mon .gitconfig :

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

Avec ce qui précède, je peux le 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

9voto

cat Points 726

Pour les situations difficiles (surtout si vous n'avez pas vérifié le git-repo), je pense que le moyen le plus simple est d'appliquer un patch. Pour cela, il suffit d'ouvrir le pull-request sur github et d'ajouter un ".patch" à l'URL, de le télécharger et d'appliquer le patch.

Exemple :

cd cordova-plugin-media
wget https://github.com/apache/cordova-plugin-media/pull/120.patch
patch -p1 < 120.patch

5voto

David Phillips Points 3413

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X