2013-04-30 6 views
39

Ich versuche, eine Pull-Anforderung auf GitHub zu einer Verzweigung zu überprüfen, die nicht Master ist. Der Zielzweig war hinter dem Master und die Pull-Anforderung zeigte Commits vom Master, also fusionierte ich den Master und schob ihn nach GitHub, aber die commits und diff für sie erscheinen immer noch in der Pull-Anforderung nach der Aktualisierung. Ich habe überprüft, dass der Zweig auf GitHub die Commits vom Master hat. Warum erscheinen sie immer noch in der Pull-Anfrage?GitHub-Pull-Anforderung mit Commits, die bereits im Zielzweig sind

Ich habe auch die Pull-Anfrage lokal ausgecheckt und es zeigt nur die un-merged Commits.

Antwort

43

Es sieht so aus, als ob der Pull-Request die Änderungen im Zielzweig nicht verfolgt (Ich kontaktierte den GitHub-Support und erhielt am 18. November 2014 eine Antwort, in der steht, dass dies beabsichtigt ist).

Allerdings können Sie es die aktualisierten Änderungen zu zeigen, indem Sie folgendermaßen vorgehen:

http://githuburl/org/repo/compare/targetbranch...currentbranch 

ersetzen githuburl, org, repo, targetbranch und currentbranch nach Bedarf.

Oder wie Hexsprite in seiner Antwort hingewiesen, können Sie auch erzwingen, um zu aktualisieren, indem Sie auf Edit auf der PR und vorübergehend Ändern der Basis zu einem anderen Zweig und wieder zurück. Dies erzeugt die Warnung:

Sind Sie sicher, dass Sie die Basis ändern möchten?

Einige Commits aus dem alten Basiszweig können aus der Timeline entfernt werden, und alte Review-Kommentare können veralten.

Und wird leave two log entries in der PR:

enter image description here

+2

Yeah, ich kontaktierte Support eine Weile zurück und bekam die gleiche Antwort. Sie optimieren nicht für diese Situation. Es ist ein bisschen frustrierend. Unsere Art, es zu umgehen, besteht darin, einfach zu reversieren und zu zwingen, nach oben zu drücken oder den Zug zu schließen und einen neuen zu schaffen. – lobati

+1

Diese Antwort behebt das Problem nicht, sondern erlaubt dem Benutzer nur, das wahre Diff zu sehen. – FearlessFuture

+2

Die Frage lautete: "Warum erscheinen sie immer noch in der Pull-Anfrage?". Es beantwortet diese Frage. –

6

Für alle anderen über dieses Kommen und verwirrt durch GitHub anfordern Verhalten ziehen, die Ursache ist, dass ein PR ein diff der Quelle Zweig Tippe gegen den gemeinsamen Vorfahren des Quellzweiges und des Zielzweiges. Es zeigt daher alle Änderungen im Quellzweig bis zum gemeinsamen Vorfahren und berücksichtigt keine Änderungen, die im Zielzweig aufgetreten sind.

Weitere Informationen finden Sie hier: https://developer.atlassian.com/blog/2015/01/a-better-pull-request/

gemeinsamen Vorfahren basiert diffs gefährlich zu sein scheinen. Ich wünschte, GitHub hätte eine Option, um eine mehr standardisierte 3-Wege-Merge-basierte PR zu machen.

+0

Der Grund, den Sie erwähnten, scheint richtig, aber ich bin verwirrt, weil im Allgemeinen, wann immer der Meister aktualisiert wird, ich die Änderungen zu meinem Zweig wieder zusammenführe ... ** git Kasse Mein-Zweig -> Git merge master **. Die Pull-Anforderung wird sofort aktualisiert. Wird der gemeinsame Vorfahr auch aktualisiert? –

+0

Dieses Verhalten scheint zu treten, wenn Sie Rebase statt Merge machen –

12

Eine Möglichkeit, dies zu beheben, ist git rebase targetbranch in diesem PR. Dann git push --force targetbranch, dann zeigt Github die richtigen Commits und Diff. Sei vorsichtig damit, wenn du nicht weißt, was du tust. Vielleicht check einen Test-Zweig zuerst, um die Rebase dann git diff targetbranch, um sicherzustellen, dass es immer noch was Sie wollen.

0

Ich bin mir nicht sicher über die Theorie dahinter. Aber ich habe das mehrere Male und in der Lage, dies zu beheben, indem ich Folgendes tue.

git pull --rebase 

Dies holen und die Änderungen von Ihrem ursprünglichen Repo-Master-Zweig fusionieren (Wenn Sie zeigen Sie auf, dass haben)

Sie dann Ihre Änderungen drücken kräftig auf Ihre Github geklonte Repository (Ziel)

git push -f origin master 

Dadurch wird sichergestellt, dass Ihr Github-Klon und Ihr Eltern-Repo auf dem gleichen Github-Commit-Level sind und keine unnötigen Änderungen in den Zweigen angezeigt werden.

5

Sie müssen das folgende in der ~/.gitconfig Datei hinzuzufügen:

[rebase] 
    autosquash = true 

Dies wird automatisch das gleiche wie das, was this answer zeigen erzielen.

Ich habe dies von here.

+2

Verdammt, ich habe versehentlich auf Abstimmen geklickt. Diese Antwort hat mir geholfen. lass mich das bitte ändern. – hosein

+0

@ Hosein Mach es. Sie sollten es jetzt tun können. –

+1

Ich denke, das sollte entweder die akzeptierte Antwort sein, oder in der akzeptierten Antwort enthalten sein. Dies erreicht das Ergebnis, das ich gesucht habe! –

5

Zusammenfassend lässt GitHub die Commit-Verlauf nicht automatisch in Pull-Anforderungen neu. Die einfachsten Lösungen sind:

Lösung 1: Rebase

Angenommen, Sie in master von feature-01 zusammenführen möchten:

git fetch origin 
git checkout feature-01 
git rebase origin/master 
git push --force 

Wenn Sie auf einer Gabel arbeiten dann müssen Sie origin oben ersetzen mit upstream. Unter How do I update a GitHub forked repository? erfahren Sie mehr über das Verfolgen von Remote-Zweigstellen des ursprünglichen Repositorys.

Lösung 2: Erstellen Sie eine neue Pull-Request

Angenommen, Sie Intro master von feature-01 zusammenführen möchten:

git checkout feature-01 
git checkout -b feature-01-rebased 
git push -u origin feature-01-rebased 

Nun öffnen Sie eine Pull-Anforderung für feature-01-rebased und schließen Sie das eine für feature-01.

13

Hier ist ein guter Workaround. Verwenden Sie die Schaltfläche Edit, wenn Sie den PR in GitHub anzeigen, um den Basiszweig in einen anderen als master zu ändern. Dann schalte es zurück auf master und es werden jetzt nur die Änderungen von den letzten Commits korrekt angezeigt.

Verwandte Themen