414 Stimmen

GitHub Pull-Anforderung zeigt Commits, die bereits im Zielsegment-Zweig vorhanden sind

Ich versuche, ein Pull-Request auf GitHub zu einem Branch zu überprüfen, der nicht master ist. Der Zielbranch hinkte master hinterher und der Pull-Request zeigte Commits von master, also habe ich master gemerged und es auf GitHub gepusht, aber die Commits und die Änderungen für sie erscheinen immer noch im Pull-Request nach dem Aktualisieren. Ich habe mehrmals überprüft, dass der Branch auf GitHub die Commits von master hat. Warum erscheinen sie immer noch im Pull-Request?

Ich habe auch den Pull-Request lokal überprüft und es zeigt nur die nicht gemergten Commits.

22voto

Elena Punkte 1529

Sie müssen folgendes zur Ihrer Datei ~/.gitconfig hinzufügen:

[rebase]
    autosquash = true

Dies erreicht automatisch dasselbe wie diese Antwort zeigt.

Ich habe das von hier bekommen.

14voto

Elijah Lynn Punkte 11083

Ein Weg, um dies zu beheben, besteht darin, git rebase zielbranch in diesem PR durchzuführen. Dann git push --force zielbranch, dann zeigt Github die richtigen Commits und Unterschiede an. Seien Sie vorsichtig damit, wenn Sie nicht wissen, was Sie tun. Vielleicht erstellen Sie zunächst einen Testbranch, um das Rebase durchzuführen, dann git diff zielbranch, um sicherzustellen, dass es immer noch das ist, was Sie möchten.

14voto

user3755282 Punkte 743

Verwenden Sie anstelle der 3-Punkt-URL die 2-Punkt-URL zum Vergleichen

Stattdessen

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

Verwenden Sie

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

8voto

mfaani Punkte 28161

Was ich versucht habe und warum es passiert?

Keine der Lösungen hat für mich funktioniert. Als ich zwei Punkte verwendet habe, d.h. .. anstelle von ..., war der Unterschied auf GH viel näher an dem, was ich geändert hatte. Aber immer noch nicht genau alle meine Änderungen.

Das passiert, weil es ein Problem gibt, wie GitHub squash gemergte Änderungen darstellt. Am besten erklärt hier

Es passiert im Grunde genommen, wenn:

  1. Änderungen von featureBranch pushen
  2. Squash mergen in main
  3. Lokal, während ich immer noch auf featureBranch bin, mergen mit main. Weitere Änderungen machen und erneut pushen
  4. Aber dann auf GitHub sehe ich mehr Änderungen als ich erwarte.

Es ist erwähnenswert, dass dies kein Problem mit Git ist. Stattdessen ist es ein Problem mit GitHub. GitHub kann nicht erkennen, dass der zusammengeführte Commit identisch mit der Summe der nicht zusammengeführten Commits ist und verursacht eine extra Diff.


Lösung

Auf deinem lokalen main alle Änderungen rückgängig machen und staschen, die noch nicht mit main gemergt wurden. Das habe ich so gemacht. Zum Beispiel, wenn ich 4 Commits hatte, die nicht in meinem PR waren und die squash gemergt wurden, dann würde ich folgendes tun:

  • git reset HEAD~4
  • git stash save "letzte 4 Commits"

Dann erstelle einen neuen Branch mit dem, was du gerade gestasht hast. Schritte:

  • git checkout main
  • git checkout -b newBranch
  • git stash apply
  • git add --all
  • git commit -m "irgendeine Nachricht"
  • git push

5voto

Naser Nikzad Punkte 463

Dies geschieht, wenn PRs mit der Option Squash und Merge zusammengeführt werden. Wenn Sie möchten, dass alte Commits nicht in den folgenden PRs angezeigt werden, dann mergen Sie die PRs einfach mit der Option Einen Merge-Commit erstellen.

  • Einen Merge-Commit erstellen
  • Squash und Merge
  • Rebase und Merge

Bildbeschreibung hier eingeben

Hinweis: Sobald dies erledigt ist, zeigen die nächsten PRs immer ihre eigenen Commits an und nicht die alten, da die alten bereits durch die Option Einen Merge-Commit erstellen zum Basiszweig hinzugefügt wurden.

Technische Erklärungen: Was ist der Unterschied zwischen Merge --squash und Rebase?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X