GitHub: Wie füge ich offene Pull-Requests zum lokalen Repository hinzu?

Lesezeit: 4 Minuten

Ich benutze die NSDate-Erweiterungen Plugin in meinem iOS Xcode-Projekt. Das Master-Repository weist einige Fehler auf, die in zwei Pull-Requests behoben zu sein scheinen:

Diese Anfragen sind noch offen und werden vom Master-Repo nicht akzeptiert. Wie kann ich diese auf Git zu meinem lokalen Repository hinzufügen? Es wäre in Ordnung, wenn mein lokales Repo aktualisiert wird, wenn ihr Fork später aktualisiert wird:

  • mögliches Duplikat von Pull-Requests von anderen Forks in meinen Fork

    – CharlesB

    25. Februar ’13 um 13:35

  • mögliches Duplikat von git: Wie kann ich einen nicht zusammengeführten Pull-Request für einen Branch abrufen, der mir nicht gehört?

    – Ciro Santilli

    2. Juni ’14 um 14:35

GitHub Wie fuge ich offene Pull Requests zum lokalen Repository hinzu
JonnyJD

Sie können die Anforderungen von der Befehlszeile abrufen, ohne Fernbedienungen hinzuzufügen:

git pull https://github.com/erica/NSDate-Extensions +refs/pull/6/head

Wenn Sie sich noch nicht sicher sind, ob Sie dies tun möchten, sollten Sie sich zuerst diesen Zweig ansehen mit:

git fetch https://github.com/erica/NSDate-Extensions +refs/pull/6/head:refs/origin/pull/6

Der Vorteil gegenüber der Verwendung der Patch-Dateien besteht darin, dass git die tatsächlichen Commits erhält. So kann git sehen, wann der Master zuvor mit dem Pull-Request zusammengeführt wurde. Die Patch-Datei kennt solche Unterschiede nicht.

Füge hinzu ein .patch bis zum Ende der Pull-URL – Sie können den Patch herunterladen und auf Ihr Repository anwenden:

curl https://github.com/erica/NSDate-Extensions/pull/6.patch | git am

  • Nachdem ich den obigen Befehl ausgeführt habe, wurde der Patch erfolgreich angewendet, aber wenn ich ein git status es sagt, dass es keine Änderungen gibt. Warum kann dieser Patch mein lokales Repository ändern und trotzdem sagen, dass es keine Änderungen gibt?

    – dhrm

    17. Januar ’12 um 14:15

  • @manojlds: netter Trick! Ihre Antwort gilt auch für stackoverflow.com/questions/6022302/…

    – CharlesB

    25. Februar ’13 um 13:39

  • @DennisMadsen: git am nicht nicht Einfach den Patch auftragen. pull/*.patch besteht eigentlich aus mehreren Patches (einer pro Commit in der Pull-Anfrage) Und jeder Patch wird als Commit angewendet. Danach gibt es also keine nicht festgeschriebenen Änderungen (welche der Git-Status anzeigen könnte).

    – JonnyJD

    7. August ’13 um 6:35

  • Dies funktioniert nur mit einfachen Pull-Requests, die niemals Commits vom Master zusammengeführt haben. Aus diesem Grund würde ich es immer vorziehen, die tatsächlichen Pull-Request-Branches wie in stackoverflow.com/a/18096344/1904815 zu verwenden.

    – JonnyJD

    7. August ’13 bei 6:44

  • Anscheinend hat sich bei GitHub etwas geändert. Diese URL ist nur eine Weiterleitung/ein Link zu https://patch-diff.githubusercontent.com/raw/erica/NSDate-Extensions/pull/6.patch. Das Ersetzen der neuen URL funktioniert jedoch.

    – Sparfalke

    19. August ’15 um 23:19

Sie sollten die Forks hinzufügen, die die Pull-Requests angeboten haben, und sie als Remote hinzufügen:

  • Finden Sie die Person, die den Link beisteuert (normalerweise klicken Sie einfach auf das Hash-Symbol sha1)

  • Tun Sie etwas wie:

    git remote add githubuser theirgithubfork.git

Dann können Sie ihre Änderungen ganz einfach herunterziehen:

  • git fetch githubuser

Nehmen Sie ganz einfach einzelne Commits mit”

  • git cherry-pick thesha1fromthepullrequest

Stellen Sie sich für ein vollständiges Beispiel vor dieser Pull-Request (6bbbcc5) von RogerE über das Ruby Capistrano-Projekt.

$ git clone git@github.com:capistrano/capistrano.git
$ cd capistrano
$ git remote add RogerE https://github.com/RogerE/capistrano.git
$ git fetch RogerE
$ git cherry-pick 6bbbcc5

  • Also sollte ich das Original-Repo von Erica klonen und “git remote add” für beide Forks von Ricardo1980 und Exalted ausführen? Was, wenn ich danach einen “git pull” mache, würde es nur aus dem ursprünglichen Repository ziehen – oder würden auch Updates von den beiden Fernbedienungen gezogen?

    – dhrm

    17. Januar ’12 um 8:11

  • Warum machen Sie beide einen Fetch und danach einen Rosinenpick? Würde der Abruf nicht alles von der Fernbedienung herunterziehen?

    – dhrm

    17. Januar ’12 um 8:15

  • git pull würde aus dem ursprünglichen Repo ziehen. Sie können angeben, aus welchem ​​Repository abgerufen werden soll, indem Sie den Remote-Namen und die refspec angeben. z.B git pull RogerE master.

    – Ramon Marco L. Navarro

    17. Januar ’12 um 8:22

  • git fetch würde nur die Änderungen herunterladen, aber noch nicht zusammenführen, bis Sie einen Befehl zum Zusammenführen angeben, z git merge oder git rebase.

    – Ramon Marco L. Navarro

    17. Januar ’12 um 8:25

  • Ok, es gibt also keine Möglichkeit, mit einem einzigen Pull-Befehl Updates von den drei Repositorys gleichzeitig abzurufen?

    – dhrm

    17. Januar ’12 um 8:25


Sie können bestimmte Pull-Requests wie folgt abrufen:

git pull https://github.com/erica/NSDate-Extensions/pull/6
git pull https://github.com/erica/NSDate-Extensions/pull/7

Imo ist dies viel einfacher als das Hinzufügen einer Fernbedienung (insbesondere wenn es sich nur um einmalige Korrekturen handelt) oder das Versenden über Curl.

.

198960cookie-checkGitHub: Wie füge ich offene Pull-Requests zum lokalen Repository hinzu?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy