So entfernen Sie Commits aus einer Pull-Anforderung


102

Ich habe eine Pull-Anfrage gestellt, aber danach habe ich einige Commits für das Projekt vor Ort vorgenommen, wodurch meine Pull-Anfrage verschmutzt wurde. Ich habe versucht, sie zu entfernen, aber ohne Glück.

Ich habe einige ähnliche Fragen zu StackOverflow gefunden, kann aber nicht anwenden, was dort enthalten ist. Es ist meine erste Pull-Anfrage auf GitHub, daher ist es mir irgendwie seltsam, wie das alles funktioniert.

Das hervorgehobene Commit ist das, das ich brauche, um alle anderen Dinge zu behalten und zu entfernen. Es wird das vierte Commit in der Geschichte, weil ich einige Zusammenführungssachen mache.

Geben Sie hier die Bildbeschreibung ein

mein git log Geben Sie hier die Bildbeschreibung ein

Kann jemand bitte erklären, was los ist und wie dieses Problem behoben werden kann?


2
Sie müssen die Basis neu festlegen und nur das Commit "Aus Github hinzugefügt" auswählen (dh die Zeilen für jedes andere Commit auskommentieren)
Robbie Averill

1
Wenn Sie den Zweig auf welchen Zweig setzen, können Sie weitere Erklärungen hinzufügen.
Humazed

what branch= der Zweig, an dem Sie arbeiten, onto what branch= der Zweig, in den Sie eine Anfrage stellen
Robbie Averill

Ich erklärte, was @Robbie Averill in meiner Antwort angedeutet hatte. Es ist seltsam, dass bis jetzt niemand eine Antwort geschrieben hat, die dies erklärt.
Ferit

Antworten:


107

Sie haben verschiedene Techniken, um es zu tun.

In diesem Beitrag - lesen Sie den Teil über das Zurücksetzen - wird detailliert erklärt, was wir tun möchten und wie es geht.

Hier ist die einfachste Lösung für Ihr Problem:

# Checkout the desired branch
git checkout <branch>

# Undo the desired commit
git revert <commit>

# Update the remote with the undo of the code
git push origin <branch>

Der Befehl zum Zurücksetzen erstellt ein neues Commit mit dem Rückgängigmachen des ursprünglichen Commits.


2
Funktioniert es auch dann, wenn wir das Projekt von einer anderen Person gegabelt haben und einige Kommentare in der Pull-Anfrage entfernen möchten?
Dr.jacky

104

Die Leute würden nicht gerne ein falsches Commit und ein Revert-Commit sehen, um Änderungen des falschen Commits rückgängig zu machen. Dies verschmutzt die Commit-Historie.

Hier ist eine einfache Möglichkeit, das falsche Commit zu entfernen, anstatt Änderungen mit einem Revert-Commit rückgängig zu machen.

  1. git checkout my-pull-request-branch

  2. git rebase -i HEAD~n// Wo nist die Anzahl der letzten Commits, die Sie in die interaktive Rebase aufnehmen möchten?

  3. Ersetzen Sie pickdurch dropfür Commits, die Sie verwerfen möchten.
  4. Speichern und schließen.
  5. git push --force

8
Das hat bei mir wie ein Zauber funktioniert. Ich hatte eine Menge Commits, die nicht in der PR hätten sein sollen. Ich habe es nur interaktiv neu basiert, diese Commits gelöscht und zurückgeschoben
FullStackEngineer

1
Sie sollten trotzdem mit dem Remote-Master synchronisieren, bevor Sie einen PR starten, nein?
Ferit

5
Um zu pushen musste ich tun : git push origin HEAD:myBranch --force. Aber sonst super und hilfsbereit.
ScottyBlades

@ScottyBlades Ich habe diesen Teil absichtlich weggelassen, da er außerhalb des Geltungsbereichs liegt. Wenn Sie den Tracking-Zweig nicht festgelegt haben, müssen Sie ihn entweder festlegen oder wie Sie explizit drücken.
Ferit

4
Dies ist auch nützlich, wenn Sie eine offene PR in GitHub reparieren möchten. Sie müssen nur in der Lage sein, einen erzwungenen Push auszuführen
Vladimir Hidalgo

6

Wenn Sie ein Commit entfernen und seine Änderungen nicht beibehalten möchten, hat @ferit eine gute Lösung.

Wenn Sie dieses Commit zum aktuellen Zweig hinzufügen möchten, es aber nicht sinnvoll ist, Teil des aktuellen PR zu sein, können Sie stattdessen Folgendes tun:

  1. verwenden git rebase -i HEAD~n
  2. Tauschen Sie das Commit, das Sie entfernen möchten, in die unterste (letzte) Position
  3. Speichern und schließen
  4. Verwenden Sie git reset HEAD^ --softdiese Option, um die Änderungen aufzuheben und sie wieder in einen bereitgestellten Zustand zu versetzen.
  5. Verwenden Sie git push --forcediese Option, um den Remote-Zweig ohne Ihr entferntes Commit zu aktualisieren.

Jetzt haben Sie das Commit von Ihrer Fernbedienung entfernt, aber die Änderungen werden weiterhin lokal vorgenommen.


2

Gehen Sie also wie folgt vor:

Nehmen wir an, Ihr Filialname ist my_branch und dies hat die zusätzlichen Commits.

  1. git checkout -b my_branch_with_extra_commits (Halten Sie diesen Zweig unter einem anderen Namen gespeichert)
  2. gitk (Öffnet die Git-Konsole)
  3. Suchen Sie nach dem Commit, das Sie behalten möchten. Kopieren Sie die SHA dieses Commits in einen Notizblock.
  4. git checkout my_branch
  5. gitk (Dies öffnet die Git-Konsole)
  6. Klicken Sie mit der rechten Maustaste auf das Commit, zu dem Sie zurückkehren möchten (Status vor Ihren Änderungen), und klicken Sie auf " reset branch to here"
  7. Mach a git pull --rebase origin branch_name_to _merge_to
  8. git cherry-pick <SHA you copied in step 3. >

Sehen Sie sich nun den Commit-Verlauf der lokalen Niederlassung an und stellen Sie sicher, dass alles gut aussieht.


0

Das hat mir geholfen:

  1. Erstellen Sie einen neuen Zweig mit dem vorhandenen. Nennen wir das vorhandene branch_oldund das neue als branch_new.

  2. Zurücksetzen branch_new einen stabilen Zustand , wenn Sie überhaupt kein Problem beim Festschreiben hatten. Gehen Sie beispielsweise wie folgt vor, um es auf die Ebene Ihres lokalen Masters zu bringen:

    Git Reset - Hard Master Git Push - Force Origin

  3. cherry-pickdie Commits von branch_oldinbranch_new

  4. git push
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.