it-swarm.com.de

Wie kann ich eine nicht zusammengeführte Pull-Anforderung für einen Zweig abrufen, der mir nicht gehört?

Ich muss eine bestimmte Pull-Anforderung (die noch nicht im Hauptstream verarbeitet wurde) im NServiceBus-Repo einholen:

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

Es ist offensichtlich nicht mein Repo, aber ich brauche die Änderungen, die in diesem Pull-Request vorhanden sind.

Was ist der beste Weg, dies zu tun?

59
user156888

So holen Sie einen Pull in Ihr Repository:

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

Dann machen Sie mit FETCH_HEAD, was Sie wollen:

git checkout -b new-branch FETCH_HEAD
65
wolfc
git pull Origin pull/28/head

Oder

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

Kann ich eine noch nicht zusammengeführte Pull-Anfrage ziehen?

52
Steven Penny

Du kannst das:

1) Fügen Sie die Upstream-Fernbedienung hinzu:

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

2) Danach können Sie jede Pull-Anforderung an eine neue Zweigstelle anhand ihrer ID auschecken:

git fetch upstream pull/PULL_REQUEST_ID/head:NEW_BRANCH_NAME

Dann haben Sie einen Zweig namens NEW_BRANCH_NAME, der den PR-Code enthält.

Alias ​​hinzufügen:

Wenn Sie dies so oft wie ich tun, möchten Sie vielleicht einige Aliasnamen dafür einrichten . Ich habe dies in meiner .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 \"[email protected]\"; \
        git switch $branch; \
        }; f "

Mit dem oben genannten kann ich tun:

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
17
elias

Für schwierige Situationen (insbesondere wenn Sie kein ausgechecktes git-repo haben), denke ich, ist der einfachste Weg, einen Patch anzuwenden. Öffnen Sie dazu einfach die Pull-Anfrage auf github und fügen Sie der URL ein ".patch" hinzu, laden Sie sie herunter und installieren Sie den Patch.

Beispiel:

cd cordova-plugin-media
wget https://github.com/Apache/cordova-plugin-media/pull/120.patch
patch -p1 < 120.patch
7
cat
5
David Phillips

github/hub

https://github.com/github/hub ist ein GitHub-CLI-Helfer, der diese und andere Anwendungsfälle ausführlich behandelt und dabei zusätzliche Informationen aus der GitHub-API verwendet. Z.B.:

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

Ergebnis:

  • wir befinden uns jetzt in einem Zweig namens <USERID>-<BRANCH_NAME>, der die PR enthält.

    Beachten Sie den guten Filialnamen, der automatisch für uns festgelegt wurde.

  • dieser Zweig ist so eingestellt, dass er den ursprünglichen Zweig auf der Gabelung verfolgt, d. h. .git/config enthält:

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

    Wenn also weitere Commits gepusht werden, können wir sie direkt git fetchen.

Die Installation von hub unter Linux ist derzeit schwierig, wenn Sie mit Go nicht vertraut sind, aber es lohnt sich. Unter Ubuntu 14.04 ist das Go in den Repositories zu alt, daher ist GVM die beste 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

Ich habe GitHub außerdem gebeten, uns auf der Web-Benutzeroberfläche ein Kopier-Einfügungs-Cheatsheet zu geben: https://github.com/isaacs/github/issues/449

Sobald Sie das Upstream-Repo als Upstream-Remote hinzugefügt haben (wie @elias darauf hinweist):

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

Sie können git so konfigurieren, dass Pull-Anforderungen standardmäßig abgerufen werden:

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

Also holen wir es ab:

$ 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

Und schau es dir an:

$ git checkout pr/2
Branch pr/2 set up to track remote branch pr/2 from upstream.
Switched to a new branch 'pr/2'
3
SummerBreeze

Hier sind die Befehle, die für mich gearbeitet haben.

Ich gehe davon aus, dass man bereits ein Repo (zum Beispiel pytorch ) lokal auf sein System geklont hat. Danach hat ein Freiwilliger/Enthusiast einen Code beigesteuert und einen PR für das Remote-Repository herausgegeben, dieser wurde jedoch noch nicht zusammengeführt mit dem Master oder einem anderen Zweig zusammengeführt. So,

Zuerst müssen wirgit remote addzum Github-Remote-Repository machen:

# I've given the name `original`; you can give some other name as per your liking
$ git remote add original https://github.com/pytorch/pytorch

Dann cd in das Repository pytorch und dann einfach machen:

# after this, the unmerged PR should be pulled to your local repo
$ git fetch original pull/<pull_number>/head    # 23, 123 etc.,

Nun wurde der ausstehende PR in Ihr lokales Repo abgerufen, und die Spitze Ihres Abrufs befindet sich in FETCH_HEAD. Wenn Sie diesen ausstehenden PRlokalzusammenführen möchten, tun Sie dies einfach :

$ git merge FETCH_HEAD

Wenn Sie danach Folgendes tun:

$ git status

Sie sollten sehen können, dass das lokale Repo vor n Commits steht, die Teil der ausstehenden PR waren (d. H. Es ist möglich, mehr als 1 Commit in einer einzelnen PR auszugeben). Die Anzahl der Commits hängt also von den Commits ab, die in der anstehenden PR enthalten sind.

0
kmario23

im Folgenden finden Sie den Befehl 'git fetch' zum Abrufen aller Pull-Anforderungen, wenn "git fetch" ausgeführt wird.

fügen Sie unten in ~/.gitconfig ein

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

beachten Sie, dass der Verweis "refs/pull-request /" die Konvention für die Benennung von Stash-Namen hat

0
Minnie Shi

Github hat ein klares Dokument zum Zusammenführen der Pull-Anfrage in ein local repo:

https://help.github.com/de/articles/checking-out-pull-requests-locally

Es läuft darauf hinaus zu wissen, dass eine Pull-Anfrage in GitHub nur eine Verzweigung im Basis-Repository ist, bei der der Verzweigungsname eine Folgenummer ist. Der obige Artikel zeigt Ihnen, wie Sie diese Nummer und die git-Befehlszeilenmagie finden, um sie mit dem gewünschten Zweignamen in Ihr lokales Repo zu ziehen.

Ich konnte keinen ähnlich einfachen Weg finden, um die Pull-Anfrage mit einem Fork zusammenzuführen, den ich auf GitHub erstellt habe.

0
BobHy

Wenn Sie nur einen nicht zusammengeführten Pull-Request von einem anderen Repo zu Ihrem eigenen Hinzufügen möchten, sind keine Komplikationen erforderlich (wie in den meisten Antworten gezeigt).

Gehen Sie stattdessen einfach in Ihr eigenes Repo und ziehen Sie das Commit (aus PR-Quelle) ein, indem Sie den Commit-Hash verwenden.

git pull https://bitbucket.org/SomeUser/SomeProjectRepo/commits/c15...db2

Auf diese Weise haben Sie nur eine Reihe neuer bearbeiteter Dateien, als hätten Sie sie selbst bearbeitet. Es liegt dann an Ihnen, wenn Sie commit mit einem Tag/Label _ möchten.

Wenn Sie dann alle Nachrichten in Ihr eigenes GitHub-Repo verschieben möchten, tun Sie dies wie immer: 

git commit -m "Added something by Anonymous"
git Push -u Origin master
0
not2qubit

Ich habe diese Lösung für dieses Problem gefunden - Änderungen aus nicht zusammengeführtem PR auf einem anderen Computer zu ziehen, ich habe folgende Dinge auf git bash 1 ausgeführt. Sie müssen einen Klon des Remote-Repository auf Computer 2 erstellt haben. 3. do git pull und fertig !!!!!!!!!!!!!!

0
Waaheeda