Den letzten Git-​Commit löschen

Von in linux, php

Gera­de eben rief der Kun­de an. Der letz­te Ände­rungs­wunsch soll doch nicht umge­setzt wer­den. Lei­der war die Ent­wick­lung bereits so weit fort­ge­schrit­ten, dass sich eine Über­ga­be des Codes an den dev-​Branch aus­ge­zahlt hat. Brav hat man alle Com­mits mit Kom­men­ta­ren doku­men­tiert und nun sitzt man nach einem “git log” zwei­felnd vor der Auf­lis­tung sei­ner Arbeit, ob man den Code jemals wie­der aus dem Index her­aus­be­kommt.

Doch das geht glück­li­cher­wei­se sehr ein­fach. Wenn man weiß, wie. Zuerst soll­te man ent­schei­den, ob jener Code, der sich im letz­ten Com­mit befin­det, noch ver­wen­det bzw. geän­dert, oder er (fast) unwie­der­bring­lich kübeln wer­den soll. Dazu lau­tet der Befehl, den man gleich auf sein Git-​Repository los­lässt:

test@test ~ $ git reset --hard HEAD^

Dabei sorgt die Opti­on --hard dafür, dass alle Ände­run­gen des letz­ten Com­mits zurück­ge­setzt wer­den. Ange­nom­men das Repo­si­to­ry befin­det sich in einem Zustand “A”, ein “git sta­tus” mel­det “not­hing to com­mit”. Dann ändert man etwas am Repo­si­to­ry und über­trägt die Ände­run­gen in den Index und den HEAD (git com­mit), womit das Repo­si­to­ry in den Zustand “B” über­führt wird. Wie­der mel­det “git sta­tus” ein “not­hing to com­mit”. Führt man jetzt einen reset --hard durch und fragt den Sta­tus ab, erhält man wie­der ein “not­hing to com­mit”. Aller­dings befin­det sich dann das Repo­si­to­ry wie­der im Zustand “A”.

Anders beim reset --soft: 

test@test ~ $ git reset --soft HEAD^

Hier blei­ben die Ände­run­gen im Zustand “B”. Aller­dings mel­det ein git sta­tus “Chan­ges to be com­mit­ted” und das Repo­si­to­ry zeigt even­tu­el­le Daten als hin­zu­ge­fügt an (also ein Sta­tus wie nach einem “git add .”).

Tat­säch­lich ist ein git reset --soft HEAD^ nichts ande­res als die Umkehr des letz­ten git com­mit

Damit eig­net sich ein reset --soft her­vor­ra­gend, um viel­leicht noch klei­ne Ände­run­gen an den Daten vor­zu­neh­men und z.B. einen vor­ei­lig abge­schick­ten Com­mit zu kor­ri­gie­ren. Oft wird ein reset --soft auch dazu ver­wen­det, um ein­fach nur den Kom­men­tar des Com­mits zu kor­ri­gie­ren.

Share on LinkedInShare on Redditshare on TumblrShare on StumbleUponDigg thisShare on FacebookGoogle+Tweet about this on TwitterEmail to someone