560 Stimmen

Wie kann ich ungemeldete Upstream-Pull-Requests von anderen Forks in meinen Fork übernehmen?

Ein Projekt auf GitHub, von dem ich einen Fork habe, hat eine neue Pull-Anfrage, die ich in meinen Fork ziehen möchte, die der Autor aber noch nicht gezogen hat.

Gibt es eine einfache Möglichkeit, Pull Requests von anderen Forks in meinen Fork zu übernehmen? Gibt es hier noch etwas, das ich übersehe?

395voto

Hotschke Punkte 8535

Update: Über die Webseite

Sie können dies auch über die Github-Webseite tun.

Ich nehme an, Sie sollten bereits eine Gabel ( MyFork ) des gemeinsamen Repo ( BaseRepo ), die die ausstehende Pull-Anfrage von einem Fork hat ( OtherFork ), an denen Sie interessiert sind.

  1. Navigieren Sie zur Abzweigung ( OtherFork ), der den Pull-Request initiiert hat, den Sie in Ihren Fork einbringen möchten ( MyFork )
  2. Gehen Sie auf die Pull-Requests-Seite von OtherFork
  3. Neue Pull-Anfrage anklicken
  4. Die ausstehende(n) Pull-Anfrage(n) sollte(n) angeboten werden. Denken Sie daran, die richtige OtherFork Zweig auch. Wählen Sie auf der linken Seite als Basis für Ihre Gabelung ( MyFork ) ( WICHTIG ).
  5. Jetzt ist die Option der View pull request sollte sich ändern in Create pull request . Klicken Sie hier.

Jetzt sollten Sie eine ausstehende Pull-Anfrage in Ihrem Fork haben ( MyFork ), die Sie einfach akzeptieren können.

299voto

CharlesB Punkte 80104

Sie können dies ganz einfach manuell tun:

  • fügen Sie den anderen Fork als Remote Ihres Repos hinzu:

    git remote add otherfork git://github.com/request-author/project.git
  • die Commits seines Repo abrufen

    git fetch otherfork
  • Sie haben dann zwei Möglichkeiten, den Pull Request zu übernehmen (wenn Sie sich nicht für Auswahl 1. entscheiden wollen)

    1. Wenn Sie sich nicht darum kümmern, auch die eventuellen Commits, die zwischen dem Ursprung und der Pull-Anfrage hinzugefügt wurden, zu übernehmen, können Sie einfach den Zweig, auf dem die Pull-Anfrage erstellt wurde, rebasen

      git rebase master otherfork/pullrequest-branch
    2. Wenn Sie nur die Commits in der Pull-Anfrage haben wollen, identifizieren Sie deren SHA1 und machen Sie

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

87voto

SciPhi Punkte 2235

Wie Tekkub bereits sagte, können Sie die Verzweigung einfach direkt einziehen. Meistens ist der Zweig bei GitHub einfach "master" auf dem Fork des Projekts des anfragenden Benutzers.

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

Und als praktisches Beispiel:

Nehmen wir an, Sie haben ein Github-Projekt namens safaribooks geforkt und es gibt die folgende Pull-Anfrage im Ursprungsprojekt, die Sie in Ihren Fork übernehmen wollen:

enter image description here

Führen Sie dann in dem geklonten Projektordner Ihres Forks den Befehl aus:

git pull https://github.com/fermionic/safaribooks.git fix-str-decode

31voto

jbyler Punkte 6558

Pull Requests für das Projekt können von vielen verschiedenen Autoren (Forks) kommen, und Sie wollen wahrscheinlich nicht für jeden Fork ein eigenes Remote. Außerdem wollen Sie keine Annahmen über den Zweig machen, den der Autor benutzt hat, als er die Anfrage einreichte, oder was sonst noch im Masterzweig des Autors sein könnte. Es ist also besser, die Anfrage so zu referenzieren, wie sie im Upstream-Repository erscheint, als wie sie in den anderen Forks erscheint.

Paso 1:

git remote add upstream <url>

Wahrscheinlich haben Sie diesen Schritt bereits getan, aber wenn nicht, müssen Sie ein Remote für das Upstream-Projekt definieren. Die URL ist die Klon-URL des Projekts, das Sie geforkt haben. Mehr Informationen unter Konfigurieren einer Fernbedienung für einen Fork y Synchronisierung eines Forks . upstream ist der Name, den Sie der Fernbedienung geben, und der kann alles Mögliche sein, upstream ist die übliche Bezeichnung.

Paso 2:

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

... wo {id} ist die Nummer des Pull Requests. upstream ist der Name der Gegenstelle, von der die Daten abgerufen werden sollen, d.h. einfach "upstream", wenn Sie Schritt 1 genau befolgt haben. Es kann auch eine URL sein. In diesem Fall können Sie Schritt 1 überspringen.

Paso 3:

Geben Sie eine Commit-Nachricht für den Merge-Commit ein. Sie können die Standardeinstellung beibehalten, obwohl ich empfehle, eine schöne einzeilige Zusammenfassung mit der Nummer der Pull-Anfrage, dem behobenen Problem und einer kurzen Beschreibung zu geben:

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

23voto

Brian Litzinger Punkte 4902

Einige detailliertere Informationen, die bei mir funktioniert haben.

Meine .git/config-Datei für das geforkte Repository sieht wie folgt aus:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = false
[remote "origin"]
        url = git@github.com: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/*

Führen Sie dann "git fetch source" aus, das alle Pull-Requests aus dem geforkten Repository auflistet.

 * [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

Um dann einen bestimmten Pull Request zusammenzuführen, führen Sie "git merge master origin/pr/67" aus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X