Ich versuche, eine Pull-Anfrage auf GitHub an einen Zweig zu überprüfen, der kein Master ist. Der Zielzweig befand sich hinter master, und in der Pull-Anforderung wurden Commits vom Master angezeigt. Daher habe ich master zusammengeführt und an GitHub gesendet, aber die Commits und Unterschiede für sie werden nach dem Aktualisieren weiterhin in der Pull-Anforderung angezeigt. Ich habe doppelt überprüft, ob der Zweig auf GitHub die Commits vom Master hat. Warum erscheinen sie immer noch in der Pull-Anfrage?
Ich habe die Pull-Anforderung auch lokal ausgecheckt und sie zeigt nur die nicht zusammengeführten Commits an.
Antworten:
Es sieht so aus, als würde die Pull-Anfrage Änderungen am Zielzweig nicht nachverfolgen (ich habe den GitHub-Support kontaktiert und am 18. November 2014 eine Antwort erhalten, dass dies beabsichtigt ist).
Sie können jedoch die aktualisierten Änderungen anzeigen, indem Sie folgende Schritte ausführen:
Ersetzen Sie
githuburl
,org
,repo
,targetbranch
, und jecurrentbranch
nach Bedarf.Oder wie Hexsprite in seiner Antwort hervorhob, können Sie die Aktualisierung auch erzwingen, indem Sie Editauf die PR klicken und die Basis vorübergehend in einen anderen Zweig und wieder zurück ändern. Dies erzeugt die Warnung:
Und hinterlässt zwei Protokolleinträge in der PR:
quelle
Hier ist eine gute Problemumgehung. Verwenden Sie die
Edit
Schaltfläche beim Anzeigen der PR in GitHub, um den Basiszweig in einen anderen als zu ändernmaster
. Schalten Sie es dann wieder aufmaster
und es werden nun nur die Änderungen der letzten Commits korrekt angezeigt.quelle
Zusammenfassend lässt sich sagen, dass GitHub den Festschreibungsverlauf in Pull-Anforderungen nicht automatisch neu festlegt. Die einfachsten Lösungen sind:
Lösung 1: Rebase
Angenommen, Sie möchten zusammenführen
master
ausfeature-01
:Wenn Sie an einer Gabel arbeiten, müssen Sie diese möglicherweise
origin
oben durch ersetzenupstream
. Siehe Wie aktualisiere ich ein gegabeltes GitHub-Repository? Weitere Informationen zum Verfolgen von Remote-Zweigen des ursprünglichen Repositorys.Lösung 2: Erstellen Sie eine neue Pull-Anforderung
Angenommen, Sie möchten das Intro zusammenführen
master
ausfeature-01
:Öffnen Sie nun eine Pull-Anfrage für
feature-01-rebased
und schließen Sie die fürfeature-01
.quelle
Sie müssen Ihrer
~/.gitconfig
Datei Folgendes hinzufügen :Dies entspricht automatisch dem, was diese Antwort zeigt.
Ich habe das von hier bekommen .
quelle
Für alle anderen, die darauf stoßen und durch das Verhalten von GitHub Pull Request verwirrt sind, besteht die Hauptursache darin, dass ein PR ein Unterschied zwischen der Spitze des Quellzweigs und dem gemeinsamen Vorfahren des Quellzweigs und des Zielzweigs ist. Es werden daher alle Änderungen im Quellzweig bis zum gemeinsamen Vorfahren angezeigt und es werden keine Änderungen berücksichtigt, die möglicherweise im Zielzweig aufgetreten sind.
Weitere Informationen finden Sie hier: https://developer.atlassian.com/blog/2015/01/a-better-pull-request/
Gemeinsame Unterschiede auf Ahnenbasis scheinen gefährlich zu sein. Ich wünschte, GitHub hätte die Option, eine standardmäßigere 3-Wege-PR auf Merge-Basis zu erstellen.
quelle
Eine Möglichkeit, dies zu beheben, besteht darin,
git rebase targetbranch
in dieser PR. Danngit push --force targetbranch
, dann zeigt Github die richtigen Commits und Diff. Seien Sie vorsichtig, wenn Sie nicht wissen, was Sie tun. Vielleicht checken Sie zuerst einen Testzweig ausgit diff targetbranch
, um die Rebase durchzuführen , und stellen dann sicher, dass er immer noch Ihren Wünschen entspricht .quelle
Dies geschieht mit GitHub, wenn Sie Squash-Commits aus dem Zielzweig zusammenführen.
Ich hatte Squash und Merge mit Github als Standard-Merge-Strategie verwendet, einschließlich Merges aus dem Zielzweig. Dies führt ein neues Commit ein und GitHub erkennt nicht, dass dieses gequetschte Commit dasselbe ist wie das, das sich bereits im Master befindet (jedoch mit unterschiedlichen Hashes). Git geht richtig damit um, aber Sie sehen alle Änderungen in GitHub wieder, was es ärgerlich macht, sie zu überprüfen. Die Lösung besteht darin, diese eingeführten Upstream-Commits regelmäßig zusammenzuführen, anstatt sie zu quetschen und zusammenzuführen. Wenn Sie einen anderen Zweig als Abhängigkeit in Ihren Zweig einbinden
git merge --squash
und diesen einzelnen Commit zurücksetzen möchten , bevor Sie vom Master abrufen, sobald dieser andere Zweig es tatsächlich zum Master geschafft hat.BEARBEITEN: Eine andere Lösung besteht darin, den Push neu zu starten und zu erzwingen. Saubere, aber neu geschriebene Geschichte
quelle
Ich bin mir über die Theorie dahinter nicht ganz sicher. Aber ich habe das mehrmals bekommen und kann es beheben, indem ich Folgendes tue.
Dadurch werden die Änderungen aus Ihrem ursprünglichen Repo-Master-Zweig abgerufen und zusammengeführt (wenn Sie darauf hinweisen).
Dann verschieben Sie Ihre Änderungen mit Nachdruck in Ihr geklontes Github-Repository (Ziel).
Dadurch wird sichergestellt, dass sich Ihr Github-Klon und das Repo Ihres Elternteils auf demselben Github-Commit-Level befinden und Sie keine unnötigen Änderungen zwischen den Zweigen sehen.
quelle
Probieren Sie die folgenden Befehle nacheinander aus.
quelle
Fail-Safe-Ansatz, wenn Sie zu besorgt sind, Dinge durcheinander zu bringen: Gehen Sie zur Datei und entfernen Sie die Änderungen manuell
Wenn es keine Konflikte gibt, können Sie loslegen!
quelle