Löschen aller Commits in einem Branch nach einem bestimmten Commit

Lesezeit: 4 Minuten

Benutzer-Avatar
Zaki Aziz

Ich habe Schwierigkeiten zu verstehen, wie ich rebase/revert verwenden kann, um dies zu erreichen.

Ich arbeitete an meiner master Branch und nach einem bestimmten Commit funktionierte meine Software nicht mehr. Ich wollte die damals vorgenommenen Änderungen nicht verlieren und stand unter Zeitdruck, einen Meilenstein zu erreichen, also ging ich ein paar Commits zurück git checkout und einen neuen Zweig namens erstellt working und fing an, alle meine Änderungen dorthin zu schieben. Später wurde mir klar, dass diese Änderungen (am master Filiale) wurden nicht benötigt. Jetzt möchte ich zu meinem Master-Zweig zurückkehren und alle Commits nach dem Commit löschen, mit dem ich meinen erstellt habe working verzweigen und dann my zusammenführen working verzweigen zu master Zweig.

Ich habe ein Bild mit einem Online-Fotoeditor erstellt, um zu versuchen und zu erklären, was ich versuche zu tun. Ich hoffe, es hilft:

Screenshot von Bitbucket

Ich möchte alles nach 5cb967f behalten. alles zwischen 5cb967f und a0c1de2 loswerden (ohne diese)

  • Sind die nicht benötigten Commits auf dem Master bereits veröffentlicht oder befinden sie sich nur in Ihrem privaten Repo?

    – Benjamin Bannier

    7. Dezember 2012 um 23:20 Uhr

  • sie werden veröffentlicht. Es macht mir nichts aus, die Geschichte umzuschreiben. Das neueste Commit in meiner working Zweig ist das, was ich von nun an brauche. Ich werde es nicht sein checkout-in Commits vor 5cb967f

    – Zaki Aziz

    7. Dezember 2012 um 23:23 Uhr


  • Sind Sie der einzige, der daran arbeitet, oder haben andere Leute wahrscheinlich Commits gezogen, die Sie löschen möchten?

    – Römisch

    8. Dezember 2012 um 3:17 Uhr

  • @R0MANARMY andere Leute haben gezogen, aber es ist okay. Ich bin der Hauptentwickler. Wenn sie erhebliche Probleme haben, lasse ich sie das Projekt löschen und ein neues erstellen und das neue Repository klonen.

    – Zaki Aziz

    8. Dezember 2012 um 4:10 Uhr

  • Ihr Text-Markup stimmt nicht mit der Grafik überein – das Markup sagt a0c1de2 und c460070 sind beide auf dem master branch, with a3cb01e Als Master-Tipp zeigt die Grafik keinen Branch-Commit, der einem Commit auf dem, was Sie als Master-Branch bezeichnen, übergeordnet ist, und zeigt Master selbst nicht als einschließlich a0cde2. Niemand hat auf einen Verlauf geantwortet, der mit Ihrer Textbeschreibung übereinstimmt, also habe ich einen basierend darauf hinzugefügt, aber es wäre einfacher sicher zu sein, wenn Sie die Ergebnisse von zeigen könnten git show-branch master working Es wäre viel klarer, was hier vor sich geht.

    – jthill

    8. Dezember 2012 um 16:31 Uhr


Sie haben zwei Möglichkeiten:

Geschichte umschreiben (zerstörerisch)

Sie können verwenden git-rebase um die Geschichte umzuschreiben und diese Commits wegzulassen. Sie können eine interaktive Rebase ausführen. Aus deiner Beschreibung weiß ich nicht genau, was du drin hast master und workingaber ich gehe davon aus, dass die gesamte Geschichte (gesucht und unerwünscht) dort vorhanden ist.

  git checkout master
  git rebase -i a0c1de2

An dieser Stelle Ihre $EDITOR erscheint mit einer Liste von Commits von a0c1de2 zum KOPF von master. Sie können die entsprechenden Zeilen entfernen c460070..a3cb10e um sie aus der Geschichte zu löschen.

Ihr Verlauf wird lokal umgeschrieben. Wenn Sie versuchen, diese Änderung zu pushen, handelt es sich um eine Aktualisierung ohne schnellen Vorlauf.

Zurücksetzen, Verlauf bewahren (zerstörungsfrei)

Wenn Sie den Verlauf lieber behalten möchten, können Sie eine Abfolge von Commits rückgängig machen:

git checkout master
git revert c460070..a3cb10e

Dadurch werden 7 neue Commits erstellt, die jeweils die Änderungen in diesen unerwünschten Commits der Reihe nach rückgängig machen.

Etwas an der Verlaufsgrafik ist verrückt. Was Sie wollen, ist einfach, wenn Sie sich an das darin enthaltene Textmarkup halten

$ git branch -f master working

denn es gab keine Post-working-base wird auf Master übergeben, den Sie behalten möchten.

  • Dies machte für mich mehr Sinn als das Umbasieren / Zurücksetzen. Wenn Sie zu einem vorherigen Commit zurückkehren und alle Commits nach diesem Commit löschen möchten. Checken Sie dann einfach zuerst zu diesem bestimmten Commit aus git checkout -b new-branch um einen weiteren Branch basierend auf diesem Working Commit zu erstellen. Dann tun Sie, was @jthill vorgeschlagen hat: git branch -f original-branch new-branch. Sie können den neuen Zweig einfach danach löschen, wenn Sie möchten.

    – Yong

    28. Oktober 2021 um 3:50 Uhr

1176610cookie-checkLöschen aller Commits in einem Branch nach einem bestimmten Commit

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy