So führen Sie eine GitHub-Pull-Anfrage durch


283

Wie erstelle und / oder sende ich eine Pull-Anfrage an ein anderes auf GitHub gehostetes Repository?


2
Wird dies auf den GitHub-Hilfeseiten nicht ausreichend erklärt ?
Lanzz

27
@lanzz Nein, die Hilfeseite enthält nicht einige nützliche Tipps, die ich gerne gewusst hätte, bevor ich meine ersten Pull-Anfragen gestellt habe (siehe unten).
VonC

9
@ianzz natürlich ist Githubs Seite "ausreichend", aber es gibt viele Möglichkeiten zu lernen. Was ich anstrebte, war ein Tutorial für Anfänger. Was mir in Githubs Erklärung fehlte, war: 1) es war nicht in einer Quelle enthalten (zwei Seiten, die nicht eindeutig verknüpft sind), 2) war nicht prägnant (diese Seiten sind sehr lang, lang = überwältigend), 3) war in Schlüsselabschnitten nicht menschlich erklärt. Im Unterricht ist es für einen erfahrenen Lehrer immer schwierig zu wissen, was ein Anfänger nicht weiß. Sich in die Lage des Anfängers zu versetzen, war mein Ziel, dies zu schreiben.
Tim Peterson

12
Lang kann überwältigend bedeuten, was Abbruch bedeuten kann = kein Lernen. Man kann "den Prozess verstehen" über viele Wege, die offensichtlich einfach nicht einer von ihnen wären. Um den Flammenkrieg zu beenden, muss man nicht antworten, ich verstehe, woher du kommst.
Tim Peterson

8
Sie stellen eine Pull-Anfrage von Ihrer eigenen Gabel. Das war definitiv nicht meine ursprüngliche Annahme.
Derek Illchuk

Antworten:


236

(Zusätzlich zur offiziellen Seite " GitHub-Hilfe" Pull-Anfragen verwenden ",
siehe auch" Forking vs. Branching in GitHub "," Was ist der Unterschied zwischen Ursprung und Upstream in GitHub ")

Paar Tipps zu Pull-Anfragen:

Angenommen, Sie haben zuerst ein Repo gegabelt , sollten Sie Folgendes in der Gabel tun, die Sie besitzen:

  • Zweig erstellen : Isolieren Sie Ihre Änderungen in einem Zweig. Erstellen Sie keine Pull-Anfrage von master, bei der Sie versucht sein könnten, mehrere Modifikationen gleichzeitig zu akkumulieren und zu mischen .
  • Rebase dieses Zweigs : Selbst wenn Sie bereits eine Pull-Anfrage von diesem Zweig ausgeführt haben, origin/masterwird die Pull-Anfrage automatisch aktualisiert , indem Sie sie zusätzlich zu (stellen Sie sicher, dass Ihr Patch noch funktioniert) neu aktualisieren (Sie müssen nicht auf etwas klicken).
  • Aktualisieren Sie diesen Zweig : Wenn Ihre Pull-Anfrage abgelehnt wird, können Sie einfach neue Commits hinzufügen und / oder Ihren Verlauf vollständig wiederholen: Dadurch wird Ihre vorhandene Pull-Anfrage erneut aktiviert.
  • "fokussieren" Sie diesen Zweig : dh machen Sie sein Thema "eng", ändern Sie nicht Tausende von Klassen und die gesamte App, fügen Sie nur eine genau definierte Funktion hinzu oder korrigieren Sie sie, und halten Sie die Änderungen klein .
  • Diesen Zweig löschen : Sobald er akzeptiert wurde, können Sie diesen Zweig auf Ihrer Gabel (und git remote prune origin) sicher löschen . Die GitHub-Benutzeroberfläche schlägt vor, dass Sie Ihren Zweig auf Ihrer Pull-Request-Seite löschen.

Hinweis: Informationen zum Schreiben der Pull-Anfrage selbst finden Sie unter " Schreiben der perfekten Pull-Anfrage " (Januar 2015, GitHub).


März 2016: Neue PR-Merge-Button-Option: Siehe " Github-Squash-Commits von der Weboberfläche auf Pull-Anfrage nach Überprüfung der Kommentare? ".

quetschen

Der Betreuer des Repos kann merge --squashdiese PR-Commits auswählen.


Nach einer Pull-Anfrage

In Bezug auf den letzten Punkt seit dem 10. April 2013, " Neu gestaltete Zusammenführungsschaltfläche ", wird der Zweig für Sie gelöscht:

neue Schaltfläche zum Zusammenführen

Das Löschen von Zweigen nach dem Zusammenführen wurde ebenfalls vereinfacht.
Anstatt das Löschen mit einem zusätzlichen Schritt zu bestätigen, entfernen wir den Zweig sofort, wenn Sie ihn löschen, und stellen einen praktischen Link bereit, um den Zweig wiederherzustellen, falls Sie ihn erneut benötigen .

Dies bestätigt die bewährte Methode zum Löschen des Zweigs nach dem Zusammenführen einer Pull-Anforderung.


Pull-Request vs. Request-Pull

  • Pull Request ist kein offizieller "Git" Begriff.
    Git verwendet den request-pullBefehl (!)
    , Um eine Anforderung zum Zusammenführen zu erstellen:
    Er "fasst die Änderungen zwischen zwei Festschreibungen an der Standardausgabe zusammen und nimmt die angegebene URL in die generierte Zusammenfassung auf."
    Github startet seine eigene Version seit dem ersten Tag (Februar 2008) , aber neu gestaltet diese Funktion Mai 2010 , die besagt , dass:

    Pull Request = Compare View + Issues + Commit comments
    

E-Notes für "Reposotory" (sic)

<humour>

Das (Pull Request) wird von GitHub nicht einmal richtig definiert!

Glücklicherweise würde eine echte Wirtschaftsnachrichtenorganisation wissen, und es gibt eine E-Note, um Pull-Replace durch 'E-Note' zu ersetzen :

https://pbs.twimg.com/media/BT_5S-TCcAA-EF2.jpg:large

Also , wenn Ihr repos o Tory eine E-Note braucht ... fragen Fox Business . Sie wissen Bescheid.

</humour>


2
- @ VonC danke dafür. Würde es Ihnen etwas ausmachen, Code bereitzustellen, um darauf hinzuweisen, wie sich das, was Sie gesagt haben, von dem unterscheidet, was ich gesagt habe? Die branchvs.- masterEntscheidung scheint kritisch zu sein, um die Antwort von my / Github von einer theoretischen Lösung auf etwas zu übertragen, das man tatsächlich verwenden würde.
Tim Peterson

1
@timpeterson Die Tatsache, dass Sie den Verlauf innerhalb dieses Zweigs vollständig ändern können und die Pull-Anforderung automatisch aktualisiert wird, ist hier entscheidend: Eine Pull-Anforderung muss auf dem neuesten Stand des Upstream-Projekts erfolgen. Wenn dieses Upstream-Repo neue Commits enthält, müssen Sie Ihren Zweig darüber neu gründen (den Verlauf dieses Zweigs ändern) und ihn an Ihre Verzweigung zurückschieben. Dadurch wird Ihre Pull-Anforderung (basierend auf demselben Zweig) automatisch aktualisiert.
VonC

4
Ich verstehe den Rebasing-Teil nicht. Was macht das? ( Diese Seite klingt wie Raketenwissenschaft, aber ich glaube nicht). Welchen Befehl würden Sie an diesem Punkt ausgeben, der "neu basiert"?
Camilo Martin

1
@CamiloMartin Wenn Sie in Ihrer PR-Branche sind, ist a git pull --rebase upstream/masterin der Tat in Ordnung.
VonC

1
@vikramvi master ist ein Zweig, der mit dem ursprünglichen Repo, das Sie gegabelt haben, gemeinsam ist. Dieser Zweig sollte immer das ursprüngliche Repo widerspiegeln. Sie isolieren Ihre Korrekturen in einem Zweig für Ihre PR. Sie verwenden Master nur, um zu wissen, was sich im Original-Repo befindet (und um Ihren Fix-Zweig darüber neu zu gründen, um eine einfache Zusammenführung von Pull-Request zu gewährleisten)
VonC

202

Um zu lernen, wie man eine Pull-Anfrage stellt, habe ich gerade zwei separate Hilfeseiten auf Github befolgt (unten als Aufzählungszeichen verlinkt). Die folgenden Befehlszeilenbefehle gelten für Teil 1 . Teil 2 , die eigentliche Pull-Anfrage, wird vollständig auf der Website von Github ausgeführt.

$ git clone https://github.com/tim-peterson/dwolla-php.git
$ cd dwolla-php
$ git remote add upstream https://github.com/Dwolla/dwolla-php.git
$ git fetch upstream
// make your changes to this newly cloned, local repo 
$ git add .
$ git commit -m '1st commit to dwolla'
$ git push origin master
  • Teil 1 : Gabel jemandes Repo: https://help.github.com/articles/fork-a-repo

    1. Klicken Sie auf die Schaltfläche "Gabel" des Repos, zu dem Sie beitragen möchten, in diesem Fall: Dwollas PHP-Repo (Dwolla / dwolla-php)
    2. Rufen Sie in diesem Fall die URL für Ihre neu erstellte Gabelung ab: https://github.com/tim-peterson/dwolla-php.git (tim-peterson / dwolla-php)
    3. Geben Sie die git clone->cd dwolla-php->git remote->git fetchobige Sequenz ein, um Ihre Gabel irgendwo in Ihrem Computer zu klonen (dh in diesem Fall "kopieren / einfügen" third_party TimPeterson$) und mit dem Master-Repo (Dwolla / dwolla-php) zu synchronisieren.
    4. Nehmen Sie Ihre Änderungen an Ihrem lokalen Repo vor
    5. Geben Sie die git add->git commit->git pushobige Sequenz ein, um Ihre Änderungen auf das Remote-Repo zu übertragen, dh auf Ihre Gabel auf Github (tim-peterson / dwolla-php).
  • Teil 2 : Pull-Anfrage stellen: https://help.github.com/articles/using-pull-requests

    1. Besuchen Sie die Webseite Ihrer Gabel auf Github ( https://github.com/tim-peterson/dwolla-php ).
    2. Klicken Sie auf die Schaltfläche "Pull-Request"
    3. Geben Sie Pull-Request einen Namen, geben Sie Details zu den vorgenommenen Änderungen ein und klicken Sie auf die Schaltfläche "Senden".
    4. du bist fertig!!

4
- @ alexgray, ich habe die Bash-Eingabeaufforderungen verlassen, z. B. Tims-MacBook-Pro:third_party TimPeterson$weil dies ein Tutorial für Anfänger ist und diese Eingabeaufforderungen helfen, den Benutzer zu orientieren.
Tim Peterson

1
Ja. Danke dir. Ein funktionierendes Beispiel, dem ich folgen kann. Warum hast du diesen Git Hub nicht?
Sevenearths

Nach dem git fetch upstream, brauchen Sie nicht Upstream - Änderungen mit Ihrer lokalen Kopie zu fusionieren, wobei git checkout masterdann git merge upstream/master?
Sparhawk

@Sparhawk Nein, Sie müssen Ihre Änderungen nicht mit dem Master zusammenführen, der sich in Ihrer Gabel befindet. Die Pull-Anfrage an das andere Repo kann ausschließlich außerhalb der Filiale erfolgen. In der Regel empfiehlt es sich jedoch, den Master Ihrer Gabel im Laufe der Zeit zu aktualisieren, damit Änderungen am "echten" Repo vorgenommen und in Ihrem Gabel-Repo häufig wieder in die Schleife gebracht werden.
ely

1
@HimanshuShekhar ja, aber Sie müssen die Github-Desktop-App oder deren API verwenden. Der Browser ist für mich einfacher.
Tim Peterson

70

Um eine Pull-Anfrage zu stellen, müssen Sie die folgenden Schritte ausführen:

  1. Fork ein Repository (an das Sie eine Pull-Anfrage stellen möchten). Klicken Sie einfach auf die Gabelschaltfläche auf der Repository-Seite und Sie haben ein separates Github-Repository mit Ihrem Github-Benutzernamen.
  2. Klonen Sie das Repository auf Ihren lokalen Computer. Die Github-Software, die Sie auf Ihrem lokalen Computer installiert haben, kann dies für Sie tun. Klicken Sie auf die Schaltfläche Klonen neben dem Repository-Namen.
  3. Nehmen Sie lokale Änderungen / Commits an den Dateien vor
  4. Synchronisieren Sie die Änderungen
  5. Gehen Sie zu Ihrem Github-Repository und klicken Sie neben der Verzweigungsschaltfläche auf die grüne Schaltfläche "Vergleichen und überprüfen". (Die Schaltfläche hat ein Symbol - kein Text)
  6. Eine neue Seite mit Ihren Änderungen wird geöffnet. Klicken Sie dann auf den Link zum Abrufen von Anforderungen, um die Anforderung an den ursprünglichen Eigentümer des von Ihnen gegabelten Repositorys zu senden.

Ich habe eine Weile gebraucht, um das herauszufinden, hoffe, dass dies jemandem hilft.


3
Mir war nicht klar, dass Sie ein Repo gabeln mussten, bevor Sie eine Pull-Anfrage stellen konnten. Ich dachte, ein Push-Commit würde einfach zu einer ausstehenden Verzweigung gehen, die öffentlichen Schreibzugriff hat, und dann von dort aus zusammengeführt. Vielen Dank!
Chris Arena

16

Ich habe ein Projekt gestartet, um Leuten zu helfen, ihre erste GitHub-Pull-Anfrage zu stellen. Hier können Sie das praktische Tutorial durchführen, um Ihre erste PR zu erstellen

Der Workflow ist so einfach wie

  • Gabel das Repo in Github
  • Erhalten Sie die Klon-URL, indem Sie auf die Schaltfläche zum Klonen von Repo klicken
  • Gehe zum Terminal und renne git clone <clone url you copied earlier>
  • Erstellen Sie eine Verzweigung für Änderungen, die Sie vornehmen git checkout -b branch-name
  • Nehmen Sie die erforderlichen Änderungen vor
  • Übernehmen Sie Ihre Änderungen git commit
  • Schieben Sie Ihre Änderungen auf GitHub auf Ihre Gabel git push origin branch-name
  • Gehen Sie zu Ihrer Gabelung auf GitHub, um eine Compare and pull requestSchaltfläche zu sehen
  • Klicken Sie darauf und geben Sie die erforderlichen Details an

15

Für diejenigen von uns, die ein github.com-Konto haben, aber nur dann eine böse Fehlermeldung erhalten, wenn wir "git" in die Befehlszeile eingeben, erfahren Sie hier, wie Sie dies alles in Ihrem Browser tun :)

  1. Gleich wie Tim und Farhan geschrieben haben: Fork deine eigene Kopie des Projekts: Schritt 1: Gabel
  2. Nach einigen Sekunden werden Sie zu Ihrer eigenen gegabelten Kopie des Projekts weitergeleitet: Schritt 2
  3. Navigieren Sie zu den Dateien, die Sie ändern müssen, und klicken Sie in der Symbolleiste auf "Diese Datei bearbeiten": Schritt 3: Bearbeiten Sie eine Datei
  4. Schreiben Sie nach dem Bearbeiten ein paar Wörter, die die Änderungen beschreiben, und dann "Änderungen übernehmen", ebenso gut in den Hauptzweig (da dies nur Ihre eigene Kopie und nicht das "Haupt" -Projekt ist). Schritt 4: Änderungen festschreiben
  5. Wiederholen Sie die Schritte 3 und 4 für alle Dateien, die Sie bearbeiten müssen, und kehren Sie dann zum Stammverzeichnis Ihrer Projektkopie zurück. Klicken Sie dort auf die grüne Schaltfläche "Vergleichen, überprüfen ...": Schritt 5: Starten Sie das Senden
  6. Klicken Sie abschließend auf "Pull-Anfrage erstellen" und anschließend erneut auf "Pull-Anfrage erstellen" , nachdem Sie die Überschrift und Beschreibung Ihrer Anfrage überprüft haben: Geben Sie hier die Bildbeschreibung ein

3

Ich habe die Anweisungen von tim peterson befolgt, aber eine lokale Niederlassung für meine Änderungen erstellt. Nach dem Drücken sah ich jedoch den neuen Zweig in GitHub nicht. Die Lösung bestand darin, -u zum Push-Befehl hinzuzufügen:

git push -u origin <branch>

Haben Sie die 2 Benutzernamen in der obigen URL bemerkt? der erste ist tim-petersonder 2. istDwolla
tim peterson

3
Dies ist auch besser als Kommentar zu meiner Antwort. Sie könnten einige Abstimmungen bekommen.
Tim Peterson

1

Ich habe ein Bash-Programm geschrieben, das die gesamte Arbeit zum Aufbau einer PR-Niederlassung für Sie erledigt. Bei Bedarf wird ein Forking durchgeführt, eine Synchronisierung mit dem Upstream durchgeführt, eine Upstream-Fernbedienung eingerichtet usw. Sie müssen lediglich Ihre Änderungen festschreiben, einen PR senden und einreichen.

So führen Sie es aus:

github-make-pr-branch ssh your-github-username orig_repo_user orig_repo_name new-feature

Sie finden das Programm hier und sein Repository enthält auch eine Schritt-für-Schritt-Anleitung zum manuellen Ausführen desselben Prozesses, wenn Sie verstehen möchten, wie es funktioniert, sowie zusätzliche Informationen darüber, wie Sie Ihren Feature-Zweig auf dem neuesten Stand halten können. Datum mit dem Upstream-Master und anderen nützlichen Leckerbissen.


0

Die einfachste GitHub-Pull-Anforderung stammt von der Weboberfläche, ohne git zu verwenden.

  1. Registrieren Sie ein GitHub-Konto, melden Sie sich an und wechseln Sie zu der Seite im Repository, die Sie ändern möchten.
  2. Klicken Sie auf das Bleistift - Symbol,

    Suchen Sie in der Nähe des Speicherorts nach Text, nehmen Sie die gewünschten Änderungen vor und zeigen Sie sie zur Bestätigung in der Vorschau an. Geben Sie der vorgeschlagenen Änderung eine Beschreibung mit bis zu 50 Zeichen und optional eine erweiterte Beschreibung. Klicken Sie dann auf die Schaltfläche Dateiänderung vorschlagen .

  3. Wenn Sie dies lesen, haben Sie keinen Schreibzugriff auf das Repository (Projektordner), sodass GitHub eine Kopie des Repositorys (eigentlich eine Zweigstelle) in Ihrem Konto erstellt. Klicken Sie auf die Schaltfläche Pull-Anforderung erstellen .

  4. Geben Sie der Pull-Anfrage eine Beschreibung und fügen Sie Kommentare hinzu. Klicken Sie dann auf die Schaltfläche Pull-Anfrage erstellen .
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.