Wie kann ich ein Commit zu git löschen [duplizieren]

8

Es gibt ein paar Commits in einem entfernten Zweig, die ich gerne loswerden möchte. Zum Beispiel, wenn der Verlauf wie folgt aussieht:

%Vor%

Ich möchte C und D löschen, um mir zu geben:

%Vor%

wo B jetzt HEAD ist?

    
vikash dat 18.10.2012, 16:39
quelle

2 Antworten

14

Ich werde Ihnen die verschiedenen Möglichkeiten aufzeigen, um die Commits für Sie zu löschen und wann Sie sie verwenden sollten. Bevor Sie eines davon tun, empfehle ich Ihnen dringend, Ihren Zweig in einen anderen Zweig zu kopieren, nur um sicher zu sein.

Tun Sie dies, indem Sie git checkout -b copy_branch ausführen und dann zu Ihrer ursprünglichen Verzweigung zurückkehren, indem Sie git checkout the_branch_i_want_to_delete_from_again

ausführen

Wenn Sie bereits gedrängt haben, wie in Ihrem Fall, können Sie zu # 3 springen, aber wenn Sie nicht gedrängt haben, können Sie sich 1 und 2 ansehen.

1) Ich habe noch nicht gedrängt oder arbeite alleine und die Commits, die ich entfernen möchte, sind die letzten commits:

Wenn ich: A --- B --- C --- D

und ich möchte C und D löschen.

Dann mach git reset --hard sha_of_B

was ergibt: A --- B

Wenn Sie bereits gedrängt haben, wie in Ihrem Fall, könnten Sie es immer noch so machen, dann machen Sie git push --force origin the_branch , aber das wird nicht empfohlen, da Sie andere Leute an diesem Projekt stören könnten. Sie sollten stattdessen # 3 folgen.

2) Ich habe noch nicht gedrängt oder arbeite alleine und die Commits, die ich entfernen möchte, sind in der Mitte meines Zweigs:

Wenn ich: A --- B --- C --- D

und ich möchte C löschen.

%Vor%

öffnet den äußerst nützlichen interaktiven Bildschirm für die Umbenennung:

%Vor%

Wenn git Sie auffordert, "# Wenn Sie hier eine Zeile entfernen, wird DIESES COMMIT VERLOREN." das werden wir tun.

Ich lösche die Zeile pick sha_of_C C , was mich mit:

belässt %Vor%

Ich speichere es in vi mit: wq, was ergibt:

A --- B --- D

Wenn Sie bereits gedrängt haben, wie in Ihrem Fall, könnten Sie es immer noch so machen, dann machen Sie git push --force origin the_branch , aber das wird nicht empfohlen, da Sie andere Leute an diesem Projekt stören könnten. Sie sollten stattdessen # 3 folgen.

3) Ich habe bereits gedrängt und arbeite mit anderen Leuten zusammen:

Wenn ich: A B C D und ich möchte C und D löschen.

Dann mach

%Vor%

Beachten Sie, dass Sie möglicherweise Konflikte hier lösen müssen und dann commit. Dann mach

%Vor%

Beachten Sie, dass Sie hier möglicherweise Konflikte lösen müssen und dann commit.

Dies führt zu:

A --- B --- C --- D --- Zurückgenommene_D --- Zurückgenommene_C

Dies ist sicher zu schieben, da Sie wirklich nur ein Commit hinzufügen, das alle Änderungen von C und D rückgängig macht und es im Wesentlichen löscht.

Sie sollten es generell vermeiden, ein git push --force um jeden Preis zu machen, es sei denn, dies ist absolut notwendig. Aber wenn Sie eine Push-Force verwenden wollen, verwenden Sie Schutz, sollten Sie auf jeden Fall eine Kopie Ihres Zweigs machen, bevor Sie dies tun. Es ist im Allgemeinen eine gute Regel, nur auf # 3 zu bleiben, wenn Sie überhaupt schon gedrängt haben.

Hoffentlich ist das hilfreich.

Dan

    
Dan Fischer 18.10.2012, 17:07
quelle
1

Löschen des letzten Commits

%Vor%

Um die letzten 2 Commits zu löschen

%Vor%

Sie können den Zweig lokal herunterladen. Löschen Sie dann die Commits und führen Sie einen Push --force

aus %Vor%     
Simone Carletti 18.10.2012 16:43
quelle

Tags und Links