Git: Nach merge+reset sind Änderungen an unchecked files weg



  • Hallo,

    anbei ein weiteres Problem mit meinen ersten Git-Erfahrungen: Ich habe fälschlicherweise ein merge durchgeführt. Dies wollte ich mit einem `git reset --hard HEAD^` zurücknehmen, nun sind aber Änderungen an Dateien weg, die nicht eingecheckt waren.

    Ich weiß jetzt nicht ob Git irgendwie so etwas wie ein stash angelegt hat, mit dem ich die Änderungen zurück bekomme. Blöderweise habe ich den merge nicht über die Shell, sondern über das eclipse EGit plugin durchgeführt, das mich beim merge nicht über eventuell zu verlierende Daten informiert hat.

    Meine Historie sieht so aus:

    a409356 HEAD@{0}: reset: moving to HEAD^
    bf6d152 HEAD@{1}: merge refs/heads/master: Merge made by resolve.
    a409356 HEAD@{2}: checkout: moving from issue/find-ref-for-lazy-vals to testsuite_enhance
    

    2 war aktuell (mit den geänderten Dateien), bei 0 sind die Änderungen weg. Habe ich eine Chance die Änderungen irgendwie bei Git wiederzufinden oder soll ich Backups einspielen (von dem ich glücklicherweise ein nahezu aktuelles habe)?


  • Administrator

    Das Problem dürfte wohl das "git reset --hard HEAD^" gewesen sein.

    --hard
    Resets the index and working tree. [b]Any changes to tracked files in the working tree since <commit> are discarded.[/b]
    

    http://git-scm.com/docs/git-reset

    Da du die Änderungen noch nicht committed hast, sind sie somit auch noch nicht in Git erfasst worden. Ich nehme stark an, dass die unwiderruflich weg sind. Aber vielleicht weiss da ein Git-Guru noch mehr.

    Grüssli



  • Dass mir --hard meine untracked files löscht, daran hatte ich natürlich nicht gedacht.

    Zur Verständnis: git-reset stellt doch einen gewissen commit-Zustand wieder her. Was bringt es mir mit --soft in diesen Zustand zu gehen wenn ich die Dateien, die ich dann vorfinde nicht so sind wie sie in diesem Zustand ursprünglich waren?


  • Administrator

    Antoras schrieb:

    Dass mir --hard meine untracked files löscht, daran hatte ich natürlich nicht gedacht.

    Waren es nun "untracked files" oder "not-committed changes"?

    Antoras schrieb:

    Zur Verständnis: git-reset stellt doch einen gewissen commit-Zustand wieder her. Was bringt es mir mit --soft in diesen Zustand zu gehen wenn ich die Dateien, die ich dann vorfinde nicht so sind wie sie in diesem Zustand ursprünglich waren?

    Ich habe bisher --soft noch nie benötigt, auf Stackoverflow findet man allerdings Beispiele, z.B:
    http://stackoverflow.com/questions/5203535/practical-uses-of-git-reset-soft

    Grüssli



  • Antoras schrieb:

    Zur Verständnis: git-reset stellt doch einen gewissen commit-Zustand wieder her. Was bringt es mir mit --soft in diesen Zustand zu gehen wenn ich die Dateien, die ich dann vorfinde nicht so sind wie sie in diesem Zustand ursprünglich waren?

    Ich verstehe nicht ganz, was du mit der Frage meinst.

    Ich verwende Soft-Resets zB. in folgenden Situationen:

    • Ich habe Aenderungen, die ich auf 3 unterschiedliche Commits aufteilen moechte.
    • Beim Commit verwende ich versehentlich statt "git commit -m 'foo'" "git commit -am 'foo'" und packe damit alle Aenderungen in einen einzelnen Commit.
    • Mit git reset HEAD^ kann ich genau den Zustand vor meinem letzten Commit wieder herstellen, inklusive uncommiteter Aenderungen.

    Vielleicht hast du missverstanden, was git-reset tut.

    Antoras schrieb:

    Dass mir --hard meine untracked files löscht, daran hatte ich natürlich nicht gedacht.

    Tut es auch nicht. Du musst die Aenderungen anders verloren haben oder es handelte sich um "uncommitted changes", nicht um ungetrackte Files.

    Du solltest dir mal ein vernuenftiges Git-Buch durchlesen, zB. das hier: http://git-scm.com/book



  • Dravere schrieb:

    Waren es nun "untracked files" oder "not-committed changes"?

    Tut mir leid, ich meinte uncommited files, also Änderungen, die nirgendwo bei Git eingetragen waren.

    nman schrieb:

    Vielleicht hast du missverstanden, was git-reset tut.

    Ich habe nach Beispielen/Erklärungen gesucht wie man ein `git reset --soft` anwenden kann. Die habe ich bekommen, Danke!

    nman schrieb:

    Du solltest dir mal ein vernuenftiges Git-Buch durchlesen, zB. das hier: http://git-scm.com/book

    Da bin ich schon dran, aber mir scheint, dass ich das Wissen schneller brauche als ich es mir aneignen kann. 😉


Anmelden zum Antworten