Seite 1 von 1

Wie setzt ihr versehentliche Git-Commits zurück?

Verfasst: Dienstag 24. Mai 2011, 19:16
von snafu
Manchmal (mir bereits zweimal) passiert es ja sicher auch euch, dass ihr nach dem Commiten merkt, dass etwas schiefgelaufen ist, z.B. weil dann doch mehr Änderungen oder Dateien in den Index gerutscht sind als ihr wolltet oder weil ihr euch bei dem Kommentar zum Commit zu arg verschrieben habt. Ich habe mir in diesen Fällen in Ermangelung besseren Wissens bisher die "schöne" grafische Oberfläche geschnappt (installierbar über das Paket `git-gui`, ausführbar mittels `/usr/lib/git-core/git-gui`), bin dann auf `Projektarchiv` -> `Historie darstellen` gegangen, hab anschließend den Punkt, an den ich zurück wollte, mit der rechten Maustaste angewählt und auf `Zweig hierher zurücksetzen` geklickt. Ist nach außen hin nicht sichtbar, da es ja vor dem Pushen aufgefallen ist. Jetzt zu meiner Frage: Wie geht das von der Shell aus? Ist das, was ich grafisch gemacht habe, (bezogen auf die Wirkung) überhaupt der "richtige" Weg? Ein Redo an sich wird ja wohl in Ordnung sein, oder? Nur wie macht man es am einfachsten ohne grafisches Tool?

Re: Wie setzt ihr versehentliche Git-Commits zurück?

Verfasst: Dienstag 24. Mai 2011, 20:22
von cofi
Auf der Shell ist das ein `git reset HASH` bzw ein `git reset --hard HASH` und ja das ist der 'way-to-go'. Ein Problem wird das nur dann, wenn man dabei schon veroeffentlichte Commits rueckgaengig machen will.

Daneben gibts es auch noch `git rebase --interactive` mit dem du den grossen Commit in kleinere Aufteilen kannst.

Re: Wie setzt ihr versehentliche Git-Commits zurück?

Verfasst: Dienstag 24. Mai 2011, 21:11
von SpiritCrusher
Wenn du dich nur in der Commit Message verschrieben hast, dann geht auch ein git commit --amend. Ist eigentlich dazu gedacht weitere Chunks in den Commit reinzupacken, aber da hast du auch die Gelegenheit die Message erneut zu verfassen.

Tante Edit: Wie ich geschrieben hab, taugt das natürlich auch um weitere Chunks in den Commit reinzupacken und nicht nur um Fehler in der Message zu korrigieren.

Re: Wie setzt ihr versehentliche Git-Commits zurück?

Verfasst: Dienstag 24. Mai 2011, 21:26
von snafu
`--amend` ist keine so gute Idee für so einen Fall. Das hatte ich nämlich auch zunächst probiert und durfte dann zwei Commits zurücksetzen. Ich vermute mal, `git reset` tut ziemlich genau das, was ich bisher über die GUI gemacht habe. Wenn man es ohne den Commit-Hash angibt, geht er denn automatisch um 1 Commit zurück? Das wurde mir aus der Doku nicht ganz klar.

Re: Wie setzt ihr versehentliche Git-Commits zurück?

Verfasst: Mittwoch 25. Mai 2011, 05:53
von cofi
Nein, ohne Hash passiert nichts mit den Commits. Warum testest du nicht einfach auf einem Klon?

Re: Wie setzt ihr versehentliche Git-Commits zurück?

Verfasst: Mittwoch 25. Mai 2011, 21:27
von SpiritCrusher
snafu hat geschrieben:`--amend` ist keine so gute Idee für so einen Fall. Das hatte ich nämlich auch zunächst probiert und durfte dann zwei Commits zurücksetzen. Ich vermute mal, `git reset` tut ziemlich genau das, was ich bisher über die GUI gemacht habe. Wenn man es ohne den Commit-Hash angibt, geht er denn automatisch um 1 Commit zurück? Das wurde mir aus der Doku nicht ganz klar.
Dann hast du aber irgendwas falsch gemacht, bzw. ich hab mich wahrscheinlich falsch ausgedrückt. Mit '--amend' kannst du weitere Chunks in den LETZTEN Commit der aktuellen History reinfuchteln, bzw. die Commit Message bearbeiten. Mit einem älteren Commit geht das natürlich nicht. Im Zweifelsfall hilft dann wirklich nur 'git reset --hard HASH'.

Als ich in meiner jetzigen Firma angefangen habe wurde ich auch "plötzlich" mit git konfrontiert. Hatte vorher immer mit SVN gearbeitet und ich hab anfangs so viel Mist mit unserem armen Repo veranstaltet ;)