Wie aktualisiere ich eine Pull-Anfrage von Forked Repo?


592

Also habe ich zuerst ein Repo gegabelt und dann ein Commit für dieses gegabelte Repo gemacht. Ich habe dann eine Pull-Anfrage geöffnet. In der Pull-Anfrage wurden alle gewünschten Änderungen aufgelistet.

Nachdem ich meine Pull-Anfrage überprüft hatte, gab es eine Reihe von Änderungen, die der Repo-Besitzer von mir wollte, bevor er sie akzeptierte. Ich habe diese Änderungen in meiner Gabel vorgenommen. Wie aktualisiere ich jetzt die Pull-Anforderung mit diesen Änderungen (oder sollte ich nicht so damit umgehen)?



7
@PaulDraper Ich bin nicht der Meinung, dass der Benutzer bereits verschiedene Methoden zum Aktualisieren einer Pull-Anfrage kennt und vorstellt und fragt, welche am besten ist. Ich hingegen kannte keine Methoden und fragte nach ihrer Existenz. Wie die Popularität dieser Frage zeigt, ist dies bei vielen anderen Benutzern der Fall.
Stevebot

6
Ich denke, die Popularität ist auf die Tatsache zurückzuführen, dass (1) dies eine wirklich gute, häufig gestellte Frage ist und (2) einige Benutzer hier statt dort gelandet sind. Wenn es ursprünglich als Duplikat identifiziert worden wäre, hätten sie festgestellt, dass die andere Frage dieselbe ist, und ihre Frage beantwortet.
Paul Draper

Antworten:


585

Du hast es richtig gemacht. Die Pull-Anfrage wird automatisch aktualisiert. Der Prozess ist:

  1. Pull-Anfrage öffnen
  2. Übernehmen Sie Änderungen basierend auf dem Feedback in Ihrem lokalen Repo
  3. Schieben Sie auf den entsprechenden Zweig Ihrer Gabel

Die Pull-Anfrage fügt automatisch die neuen Commits am Ende der Pull-Request-Diskussion hinzu (dh sie ist bereits vorhanden, scrollen Sie nach unten! ).


73
nett! Ich habe überall nachgesehen, außer der eigentlichen Pull-Anfrage. seine Magie, schwarze Magie, ich werde es nicht in Frage stellen.
Stevebot

57
Dies ist ein guter Grund, in Filialen zu arbeiten. Wenn Sie beispielsweise immer auf Master gedrückt haben, können Sie Ihre vorherige Pull-Anforderung unbeabsichtigt ergänzen.
Brian Pan

3
Dies scheint nicht mehr der Fall zu sein, obwohl es in der Vergangenheit war. Hier ist ein Beispiel für eine Pull-Anfrage, die ich gestellt habe ( github.com/toopay/bootstrap-markdown/pull/167 ), verglichen mit dem Zweig selbst ( github.com/mhuggins/bootstrap-markdown/commits/… ). Neugierig, wie man das nicht mehr macht, da sich der Prozess offenbar geändert hat.
Matt Huggins

1
GitHub sagt Ihnen tatsächlich: "Fügen Sie weitere Commits hinzu, indem Sie auf den SolveWorldHunger-Zweig von ChangeTheWorldProject klicken."
flow2k

1
Das gleiche hier - ich sehe keine Änderungen von Forked Repo im Haupt-Repository. Sieht aus wie ein GitHub-Bug
andrfas

78

Das Aktualisieren einer Pull-Anforderung in GitHub ist so einfach wie das Festschreiben der gewünschten Änderungen in einen vorhandenen Zweig (der mit der Pull-Anforderung verwendet wurde). Oft wird jedoch auch gewünscht, die Änderungen in ein einzelnes Festschreiben zu quetschen:

git checkout yourbranch
git rebase -i origin/master

# Edit command names accordingly
  pick   1fc6c95 My pull request
  squash 6b2481b Hack hack - will be discarded
  squash dd1475d Also discarded

git push -f origin yourbranch

... und jetzt enthält die Pull-Anfrage nur noch ein Commit.


Verwandte Links zum Rebasing:


2
Upvote für die Erwähnung von Rebase. Es hilft, das Rauschen in der Revisionshistorie zu reduzieren.
Stevebot

+11 (Ja, ich wollte, dass der Schlüssel wiederholt wird. Die Verwendung von Git Rebase / Pick / Squash funktioniert hervorragend.
Javadba

11
Der Nachteil dieses Ansatzes besteht darin, dass Sie Ihr vorheriges Commit entfernen. Das heißt, wenn in der Pull-Anfrage Kommentare abgegeben werden, gehen diese verloren und verschwinden zusammen mit dem ursprünglichen Commit.
Blowekamp

In Bitbucket können Sie Kommentare zu "früheren Versionen" einer Datei in einer Pull-Anfrage sehen. Obwohl es schön wäre, so etwas wie in Gerrit zu sehen, wo Sie Commits patchen und den gesamten Verlauf mit Kommentaren sehen können. Dies sorgt für eine übersichtliche Git-Historie und Rückverfolgbarkeit, wenn Sie zurückgehen und die vollständige Diskussion über ein Commit sehen können.
Liebe

36

Drücken Sie einfach auf den Zweig, auf den die Pull-Anforderung verweist. Solange die Pull-Anforderung noch geöffnet ist, sollte sie automatisch mit hinzugefügten Commits aktualisiert werden.


14

Ich habe es mit den folgenden Schritten gemacht:

  1. git reset --hard <commit key of the pull request>
  2. Habe meine Codeänderungen gemacht, die ich machen wollte
  3. git add
  4. git commit --amend
  5. git push -f origin <name of the remote branch of pull request>

1
Sehr gut, ich bevorzuge diesen Ansatz! GitHub verbirgt sogar die veralteten Codeabschnitte und die zugehörigen Kommentare (behält sie jedoch bei). Es ist gut zu bedenken, dass "git reset --hard" alle nach der angegebenen ID festgeschriebenen Änderungen verwirft, wenn die Pull-Anforderung mehrere Commits enthält und die zu reparierende nicht an der Spitze des Zweigs liegt. Ich hatte ein Backup, das ich manuell angewendet habe. Nicht sehr praktisch, wenn es mehr als ein zusätzliches Commit gibt ...
Nagev

3

Wenn Sie GitHub unter Windows verwenden :

  1. Nehmen Sie Änderungen lokal vor.
  2. Öffnen Sie GitHub, wechseln Sie zu lokalen Repositorys und doppelklicken Sie auf Repository.
  3. Wechseln Sie den Zweig (nahe dem oberen Rand des Fensters) zu dem Zweig, aus dem Sie die Pull-Anforderung erstellt haben (dh dem Zweig auf Ihrer Gabelseite des Vergleichs).
  4. Sollte die Option sehen, einen Commit-Kommentar rechts einzugeben und Änderungen an Ihrem lokalen Repo festzuschreiben.
  5. Klicken Sie oben auf "Synchronisieren", wodurch unter anderem Ihr Commit von lokal auf Ihren Remote-Fork auf GitHub verschoben wird.
  6. Die Pull-Anfrage wird automatisch mit den zusätzlichen Commits aktualisiert. Dies liegt daran, dass die gezogene Anforderung einen Unterschied zum Zweig Ihrer Gabel darstellt. Wenn Sie zur Pull-Anforderungsseite gehen (auf der Sie und andere Ihre Pull-Anfrage kommentieren können), sollten auf der Registerkarte Commits Ihre zusätzlichen Commits vorhanden sein.

Aus diesem Grund sollten Sie, bevor Sie eigene Änderungen vornehmen, für jede Gruppe von Änderungen, die Sie in eine Pull-Anforderung einfügen möchten, einen Zweig erstellen. Auf diese Weise können Sie nach dem Ausführen der Pull-Anforderung einen weiteren Zweig erstellen und die Arbeit an einer anderen Aufgabe / Funktion / einem anderen Bugfix fortsetzen, ohne die vorherige Pull-Anforderung zu beeinflussen.

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.