So öffnen Sie mehrere Pull-Anfragen auf GitHub

139

Wenn ich eine Pull-Anfrage auf GitHub öffne .
Alle Commits seit meiner letzten Anfrage und alle neuen werden automatisch zu dieser Anfrage hinzugefügt .

Ich kann anscheinend nicht steuern, welche Commits hinzugefügt werden und welche nicht.
Wenn ich versuche, eine andere Pull-Anfrage zu öffnen, wird der Fehler "Ups! Es gibt bereits eine Pull-Anfrage" angezeigt.

Gibt es eine einfache Möglichkeit, mehrere Pull-Anforderungen zu öffnen, ohne mit der Befehlszeile herumspielen zu müssen?

Torourke
quelle

Antworten:

116

Pull-Anforderungen basieren auf einer Verzweigung.
Die einzige Möglichkeit, eine Pull-Anforderung für mehrere Commits zu öffnen, ist:

  1. Isolieren Sie sie in ihren eigenen Zweig .
  2. Öffnen Sie die Pull-Anfragen von dort.
Mipadi
quelle
3
Ok das ist cool, ich dachte es war nur mit dem Meister. Du meinst also, ich kann viele Zweige erstellen (dh Git-Flow-Funktionen) und Pull-Anfragen für jeden von ihnen stellen ... Ich werde es versuchen!
Ziyan Junaideen
8
Ich habe gerade festgestellt, dass der Zweig die Historie der vorherigen Commits beibehalten hat, sodass eine Pull-Anforderung für den Upstream immer noch alle Commits enthält.
Aal Gheez
2
Hi @ eel-gheez, hast du herausgefunden, was du dagegen tun sollst? Wie erstelle ich isolierte PRs, ohne dass die Änderungen aus anderen Zweigen angezeigt werden?
Jonathan Cross
3
Dies löst das Problem nicht: Wenn ich versuche, eine PR zu erstellen, werden beide Zweige (mit jeweils mindestens einem Commit) verglichen. Was mache ich falsch?
MERose
1
@eelghEEz Sie sollten einen neuen Zweig erstellen, alle gewünschten Commits für diesen Zweig auswählen und dann eine Pull-Anfrage von diesem Zweig aus stellen. Es ist ein sehr wichtiges Designmerkmal von git, dass jedes Commit von seinem vorherigen Commit abhängt. Commits in git sollten nicht nur als Patch betrachtet werden, sondern als Patch, der weiß, welcher Patch zuvor angewendet wurde. Aus diesem Grund sollte ein neuer Zweig mit neuen Commits erstellt werden, deren Unterschiede möglicherweise immer noch gleich sind, deren Verknüpfungen zu den vorherigen Commits jedoch unterschiedlich sind.
MD
11

Der einfachste Weg, dies zu tun, ist mit dem Hub-Befehl ( https://github.com/defunkt/hub ).

In Ihrem Themenzweig (in diesem Beispiel "Feature"), für den Sie eine Pull-Anforderung erstellen möchten, können Sie einfach Folgendes ausführen:

git pull-request

(Denken Sie daran, zuerst Ihren Zweig zu schieben!)

Und es wird eine neue Pull-Anfrage auf GitHub für "YOUR_USER: feature" geöffnet.

Wenn Sie bereits ein Problem auf GitHub erstellt haben, können Sie diesem vorhandenen Problem sogar eine Pull-Anforderung hinzufügen (etwas, das Sie über die Web-Benutzeroberfläche nicht tun können):

$ git pull-request -i 123
[ attached pull request to issue #123 ]
Tyler Rick
quelle
2

Sie können dies tatsächlich tun, ohne einen weiteren Zweig zu erstellen, aber es erfordert ein wenig Herumspielen.
Hier sind die Schritte:

  1. Identifizieren Sie die beiden Festschreibungsbereiche, die Sie abrufen möchten. Folgendes verwende ich als Beispiel:
    (andere / Master) A -> B -> C -> D -> E (Ihre / Master)
    Nehmen wir an, Sie möchten B und C in einer Anfrage ziehen, und D & E in einem anderen.
  2. Machen Sie eine Pull-Anfrage. Lassen Sie die linke Seite ("Basis") festschreiben A. Geben Sie für die rechte Seite ("Kopf") die Festschreibungsnummer von C ein.
  3. Schreiben Sie die Beschreibung für Ihre erste Anfrage.
  4. Stellen Sie eine weitere Anfrage. Geben Sie für die Basis die Festschreibungsnummer C ein und geben Sie für den Kopf E (Ihre / Master) ein.
  5. Schreiben Sie die Beschreibung.

Aus meiner Sicht sieht die Pull-Anforderung Commit C als Verzweigungspunkt. Oder so.

Riking
quelle
Sie müssen other / master als linke Seite belassen, auch wenn Sie eine Commit-Nummer von Ihrer / master hinzufügen. Mit dieser Methode können Sie der Zusammenführungsanforderung auch keine neuen Commits hinzufügen, falls weitere Änderungen erforderlich sind.
Francisco
Ich habe eine Art Follow-up zu dieser Antwort gepostet, im Gegensatz zu einigen Informationen über Github, siehe stackoverflow.com/questions/23159860
Mark Bennett
Ich kann sehen, dass dies zwei PRs erzeugen würde, die korrekt aussehen, da sie jeweils genau die gewünschten Commits enthielten. Aber um genau zu sein, tut es das Richtige, wenn sie zusammengeführt werden? Wie in kann ich sehen, dass die erste PR B & C korrekt in andere / Master zusammenführen würde. Aber wenn die 2. PR fusioniert, woher weiß sie, in welchen Zweig sie fusionieren soll? (Da es auf Commit 'C' erstellt wurde, nicht auf other / master) Ist es wichtig, in welcher Reihenfolge die PRs zusammengeführt werden? (vermutlich so)
Jonathan Hartley
1

Wenn Sie beim ersten Erstellen der Pull-Anforderung zwei separate Formulare für eine neue Pull-Anforderung öffnen, können Sie diese erstellen, solange sie auf verschiedene Zweige zeigen, die zusammengeführt werden sollen. Zum Beispiel könnte ich zwei separate Anfragen stellen, eine zum Zusammenführen mit dem Master und eine zum Zusammenführen mit dem Test.

BeanyTheSane
quelle
1

Ich bin neu bei Git und GitHub und hatte die gleiche Frage wie das OP.

Ich habe eine Lösung gefunden, die zum Zeitpunkt des OP wahrscheinlich nicht verfügbar war.

Situation: Sie haben 3 Änderungen und möchten, dass jede aus der vorherigen aufgebaut wird und jede ihre eigene Pull-Anfrage (PR) hat.

Problem: Wenn Sie die erste PR erstellen, die versucht, die Entwicklung zum Master zu machen, sieht alles gut aus. Nachdem Sie jedoch die Änderungen für die zweite PR vorgenommen und diese zusammengeführt haben (unter Verwendung desselben Zweigs), befinden sich alle Änderungen in derselben PR .

Mini-Lösung: Erstellen Sie einen neuen Zweig

git branch mini_change_2
git checkout mini_change_2

Jetzt pushen Sie den Code an GitHub und erstellen den PR. Standardmäßig wird jedoch von mini_change_2 zum Master gezogen, außer dass der Master noch nicht über die Änderungen des ersten PR verfügt und daher alle Änderungen des PR1 und des PR2 enthält.

Beste Lösung: Geben Sie an, zu welchem ​​Zweig Sie in PR2 zusammenführen.

Akzeptieren Sie nicht nur die Standardeinstellungen beim Erstellen des zweiten PR, sondern sagen Sie, dass Sie mini_chnage_2 auf Develop ziehen. Dies zeigt nur die Änderungen in mini_change_2 an

Erstellen Sie nun einen neuen Zweig mini_change_3 und PR, der zu mini_change_3 führt.

Das Problem tritt auf, sobald Sie anfangen, sie zusammenzuführen ... aber das ist eine andere Übung.

markwusinich
quelle