Wie setzt ihr versehentliche Git-Commits zurück?
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?
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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.
Daneben gibts es auch noch `git rebase --interactive` mit dem du den grossen Commit in kleinere Aufteilen kannst.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 13
- Registriert: Montag 11. Januar 2010, 13:59
- Wohnort: Köln
- Kontaktdaten:
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.
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.
`--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.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Nein, ohne Hash passiert nichts mit den Commits. Warum testest du nicht einfach auf einem Klon?
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 13
- Registriert: Montag 11. Januar 2010, 13:59
- Wohnort: Köln
- Kontaktdaten:
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'.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.
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
