Führen Sie die Pull-Anforderung in einem anderen Zweig als dem Standardzweig in Github zusammen

122

Eine Pull-Anfrage kommt in mein auf Github gehostetes Repo. Standardmäßig wird es in den masterZweig eingefügt.

Kann ich ändern, in welchen Zweig die Änderungen übernommen werden?

eoinoc
quelle

Antworten:

86

Ab dem 15.08.2016 ermöglicht GitHub das Ändern des Zielzweigs einer Pull-Anfrage über die GUI. Klicken Sie Editneben dem Titel auf und wählen Sie den Zweig aus der Dropdown-Liste aus.

Bildschirmfoto

Sie können jetzt den Basiszweig einer Open-Pull-Anforderung ändern. Nachdem Sie eine Pull-Anforderung erstellt haben, können Sie den Basiszweig so ändern, dass die Änderungen in der Pull-Anforderung mit einem anderen Zweig verglichen werden. Wenn Sie den Basiszweig Ihrer ursprünglichen Pull-Anforderung ändern, anstatt einen neuen mit dem richtigen Basiszweig zu öffnen, können Sie wertvolle Arbeit und Diskussion behalten.

Maliayas
quelle
1
Dies sollte die richtige Antwort auf diese Frage sein (nach dem Upgrade auf GitHub dh).
Stuxnetting
Diese Funktion scheint nicht mehr zu existieren (Stand: 15.02.2018), oder? In einer kürzlich durchgeführten Pull-Anforderung wird der Zielzweig in derselben blauen Schrift auf hellblauem Hintergrund wie das Quell-Repository / der Quellzweig und nicht mehr als Schaltfläche angezeigt.
Cgogolin
12
Ah! Es tut! Man muss zuerst auf "Bearbeiten" klicken (was aus dem obigen Screenshot nicht ersichtlich ist). Ich habe das übersehen. Es tut uns leid.
Cgogolin
@cgogolin Danke, dass Sie darauf hingewiesen haben - ich war auch verwirrt, bis ich Ihren Kommentar gelesen und auf die Schaltfläche Bearbeiten geklickt habe.
Mhucka
Github warnt : "Wenn Sie den Basiszweig Ihrer Pull-Anforderung ändern, werden möglicherweise einige Commits aus der Timeline entfernt." und "Einige Commits aus dem alten Basiszweig werden möglicherweise aus der Timeline entfernt." Irgendeine Idee was das bedeutet?
Matthias Fripp
55

Der Übermittler kann dies ändern, wenn er die Pull-Anforderung ausgibt, aber sobald er sie ausgibt, können Sie sie nicht mehr ändern.

Auf der anderen Seite können Sie ihren Zweig manuell zusammenführen und pushen, was ich halbjährlich für fehlerhafte Pull-Anfragen mache.

Möglicherweise ist der hubEdelstein hilfreich bei der Arbeit mit den Komponenten der Pull-Anforderung.

Dieses Juwel schließt den manuellen Prozess ab:

  1. Fügen Sie Ihrer lokalen Kasse eine Fernbedienung für die Gabelung hinzu.
  2. Holen Sie sich diese Fernbedienung.
  3. git checkout ${target_branch} && git merge ${remote}/${branch}
  4. git push origin ...
Daniel Pittman
quelle
1
Wird Github beim manuellen Zusammenführen und Drücken feststellen, dass die Pull-Anforderung effektiv abgeschlossen wurde? Gibt es Hinweise zum Zusammenführen von einem separaten Remote-Repo (der Gabelung)?
Eoinoc
3
Ich bin nicht sicher, aber nicht direkt - da die Änderung nicht in den Zielzweig übernommen wurde, wird die Pull-Anforderung nicht wie definiert abgeschlossen. Sie müssen es manuell schließen. Informationen zu den Zeigern finden Sie im bearbeiteten Kommentar.
Daniel Pittman
Ich würde empfehlen, git merge --no-ff ...als @ GuillermoMansilla Erwähnungen in seiner Antwort zu verwenden.
Jjmontes
3
"Sobald sie es herausgeben, können Sie es nicht mehr ändern" - Ab August 2016 nicht mehr der Fall! Siehe @maliayas 'Antwort unten: stackoverflow.com/a/38985999/12484
Jon Schneider
1
Ich habe dieses Verfahren heute (3. März 2017) befolgt. Ich habe die Pull-Anfrage in einen anderen Zweig heruntergeladen, einige zusätzliche Korrekturen vorgenommen und sie dann zum Master zusammengeführt. Sobald Commits von der Pull-Anfrage im Master landeten, schloss GitHub die Pull-Anfrage automatisch.
Ivan Krivyakov
14

Eine Alternative zur Verwendung des in anderen Antworten erwähnten Hub-Edelsteins besteht darin, über die Befehlszeile lokale Pull-Anforderungen zusammenzuführen . So können Sie Folgendes tun:

$ git fetch origin
$ git checkout *target_branch*
$ git merge pr/XXX
$ git push origin *target_branch*

Die obigen Befehle funktionieren nur direkt, wenn Sie Ihrer .git/configDatei zuerst die folgende Zeile hinzufügen :

fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/*

Damit können Sie ALLE Pull-Anfragen herunterladen . Da dies für große Repos möglicherweise nicht erwünscht ist, hat GitHub die Anweisungen so geändert, dass sie die git fetch origin pull/ID/head:BRANCHNAMESyntax enthalten. Dadurch wird eine Änderung der Konfigurationsdatei vermieden und nur diese einzelne Pull-Anforderung heruntergeladen.

Grzegorz Adam Hankiewicz
quelle
8

Obwohl Sie die vorhandene Pull-Anforderung nicht ändern können, da sie nicht Ihre ist, können Sie problemlos eine neue erstellen, wenn das zugehörige Quell-Repository noch vorhanden ist - ja, auch wenn es sich um eine andere handelt.

Gehen Sie zum Repository des Übermittlers und erstellen Sie eine neue Pull-Anforderung in seinem Repository mit denselben Commits. Stellen Sie jedoch sicher, dass Sie den richtigen Zielzweig korrekt festgelegt haben.

Kehren Sie dann zu Ihrem eigenen Repository zurück und akzeptieren Sie die neue Pull-Anforderung. Voila!

Deckard
quelle
Funktioniert dies, wenn sie ihr Repository geändert haben? Wie stellt man sicher, dass es "die gleichen Commits" sind?
Ragerdl
@ragerdl - Wenn Sie mit einem "Feature-per-Branch" -Modell entwickeln, können Sie eine PR mit einer Verzweigung für eine vorgelagerte Verzweigung erstellen, die dieselben Commits enthalten sollte.
Geerlingguy
2
Die einzige Möglichkeit, dies direkt auf GitHub zu tun, ohne Zugriff auf ein lokales Repo.
kopischke
8

An der Lösung von Daniel Pittman ist nichts auszusetzen. Ich würde diese Zusammenführungen jedoch als "kein schneller Vorlauf" behandeln, dh Schritt 3 ändern für:

git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}

Durch die Verwendung --no-ffwird der Verlauf leichter lesbar. Es wird klar sagen, dass $nCommits von kamen $branch, und es wird Ihnen auch das Leben erleichtern, wenn Sie etwas zurücksetzen müssen, das in diesem Zweig getan wurde.

Um auch die Frage von eoinoc zu beantworten und einen zusätzlichen Tipp zu geben:

Nach dem Zusammenführen werden Sie von Ihrem Git-Cli aufgefordert, eine Nachricht zu schreiben. Im Allgemeinen wird eine generische Nachricht mit der Aufschrift "So etwas" angezeigt

Führen Sie den Remote-Tracking-Zweig 'Benutzer / Zweig' in Ihrem Zweig zusammen

Stellen Sie sicher, dass Sie diese Nachricht bearbeiten und einen Verweis auf die Pull-Anforderungsnummer angeben. Das heißt: (Angenommen, die Pull-Anforderungsnummer ist 123)

Führen Sie den Remote-Tracking-Zweig 'Benutzer / Zweig' in Ihrem Zweig zusammen

Refs # 123 lösen was auch immer ...

Wenn Sie also das nächste Mal Ihre Seite mit Github-Problemen / Pull-Anforderungen besuchen und diese bestimmte Pull-Anforderung überprüfen, wird Ihre Nachricht mit einem Link angezeigt, über den Sie festlegen können, wo Sie die Zusammenführung durchgeführt haben.

Hier ist ein Screenshot von dem, was ich meine.

Geben Sie hier die Bildbeschreibung ein

Guillermo Mansilla
quelle
6

Gehen Sie dazu zur Homepage Ihres Repositorys, klicken Sie auf Zweige und ändern Sie den Standardzweig vom Master in einen anderen, in meinem Fall "dev".

Wenn danach jemand eine Pull-Anfrage erstellt, führt die mergeSchaltfläche die Anfrage automatisch zu "dev" und nicht zu master zusammen.

Geben Sie hier die Bildbeschreibung ein

Abbood
quelle
danke für den Tippfehler @the Tin Man Ich schätze es
Abbood
4
Wir müssen uns nicht für das Anpassen / Bearbeiten bedanken. Das machen wir für die Seite. Schreibe weiterhin gute Antworten, das ist genug Dank.
der Blechmann