Entferne 4 Commits aus meinem Git History

8

Ich habe einige Commits gemacht und sie in mein Repository geschoben. Dann habe ich eine Pull-Anfrage gemacht, aber ich habe bemerkt, dass es einige Commits gibt, die ich nicht in der Pull-Anfrage haben möchte.

Sie sehen so aus:

%Vor%

Wenn ich diese Commits loswerden möchte:

%Vor%

Wie mache ich das? Beachten Sie, dass ich diejenigen, die in der Zeit davor liegen, diejenigen behalten möchte, die ich löschen möchte:

%Vor%     
Hommer Smith 20.06.2012, 05:29
quelle

3 Antworten

13

Sie können eine interaktive Neuanmeldung durchführen.

Angenommen, Ihr Kopf befindet sich in Ihrem Beispiel in ab1c41c , rufen Sie die Rebase wie folgt auf

%Vor%

Dies sagt Git, dass Sie die letzten 8 Commits manipulieren wollen. Sie werden in Ihren Editor mit einer Auflistung der Commits und einiger Anweisungen eingefügt.

Löschen Sie die Zeilen, die die zu entfernenden, zu speichernden und zu beendenden Commits enthalten. Git wird die Rebase vorbereiten, und das war's.

Denken Sie daran, dass Sie wegen der Rebase die Option --force weitergeben müssen, wenn Sie zum selben Zweig wechseln möchten.

Haftungsausschluss Rebasing und Zwangssteuern können dazu führen, dass du Arbeit verlierst oder Leute verärgerst, also vergewissere dich, dass du verstehst, was du tust. :)

    
Blake Taylor 20.06.2012, 07:09
quelle
3

Da Blake Taylor hier erwähnt hat, können Sie interaktives Rebase , um Commits neu zu ordnen (oder) Zwischen-Commits zu entfernen.

Aber das muss getan werden, bevor Sie diese Commits in das öffentliche Repository schieben. Siehe hier . In Ihrem Fall sind diese Commits bereits im öffentlichen Repo verfügbar. Also, ich empfehle nicht, Rebase zu verwenden.

Wenn Sie diese Commits in Ihrem Arbeitsverzeichnis nicht möchten.

  • a) Erstellen Sie eine Verzweigung, die auf 86f2509 (das letzte stabile Commit in Ihrem Arbeitsbaum) zeigt.

    git checkout -b <branch name> 86f2509

  • b) Cherry Pick die Commits, die Sie wollen. In Ihrem Fall ab1c41c und 8b38955 .

    git cherry-pick 8b38955 ab1c41c

Jetzt hat Ihr Arbeitsverzeichnis diese unerwünschten Commits nicht mehr.

    
Karthik Bose 20.06.2012 08:24
quelle
1

Setzen Sie einfach mit --hard auf das Commit kurz vor:

%Vor%

Vorsicht: Sie werden diese Commits für immer verlieren, keine Möglichkeit, zurück zu gehen. Auch wenn jemand die Commits eingezogen hat, die Sie loswerden wollen, können die Dinge unordentlich werden. In diesem Fall würden Sie sich wahrscheinlich "git revert" ansehen.

    
Kenneth Hoste 20.06.2012 05:31
quelle

Tags und Links