git reset --hard czy da się to cofnąć

0

Cześć. Zrobiłem coś bardzo głupiego ale liczę, że da się to jeszcze odkręcić :D

W skrócie.. ucze się javy i siedziałem sobie pół dnia nad projektem. Chciałem stworzyć na koniec repo w gicie i skomitować dotychczasowa praca. Zrobiłem jednak babola i moja praca znikneła.
Po kolei.

  1. Wykonałem git init
  2. git add .
  3. zobaczyłem że jakieś smieci są śledzone po wykonaniu git add . więc wpadłem na głupi pomysl wykonania komendy git reset --hard
  4. mój projekt zniknal
  5. po wykonaniu git - status wszystkie pliki projektu mają status AD

Chciałbym je odzyskać : ( ktoś wie czy jeszcze szansa czy może tym git reset --hard nabroiłem ? Dodam jeszcze, że to miał być 1 commit projektu wiec nie mam jak wrócić do poprzedniego

5
  1. xD
  2. Jeśli nie zrobiłeś commit ani push to niestety nie bardzo mozna coś poradzić
  3. Jeśli nie programujesz lodówką tylko jakimś IntelliJ albo jakimś innym porządnym IDE, to masz opcje local history

Z mojej strony zalecam:

  1. Zrobić git init na początku a nie na końcu
  2. Commitować często, nie ma powodu żeby tego nie robić
  3. Przed zrobieniem czegoś ryzykownego (reset, pull, rebase, merge) robisz push na remote przed całą zabawą
2

Podobno sie da używając polecenia reflog i wyszukując ID Twojego przeszłego commita. Jeśli Git jeszcze nie wyczyścił historii to powinieneś móc cofnąć do tego commita.

1

No właśnie nie zrobiłem pierwszego commita w tym problem : ) Shalom dobrze gada. Można z Intellij z local history wygrzebac te pliki. Jakoś to poskładam. Dzieki !

1

@vigantoletten możesz w local history znaleźć sobie miejsce gdzie zrobiłeś ten reset hard i stuknąć "revert"

5

Jeżeli zrobiłeś git add, to pliki już są w gicie i domyślnie po 30 dniach wylecą. Tylko odzyskanie ich wymaga ręcznego przegrzebania się przez cache: https://stackoverflow.com/questions/1108853/recovering-added-staged-file-after-doing-git-reset-hard-head

Jeżeli był git commit, to wtedy trywialne git reflog i szukamy commita sprzed reset --hard i potem robimy kolejny reset --hard to jakiegoś HEAD~2 czy coś.

0
Shalom napisał(a):
  1. Commitować często, nie ma powodu żeby tego nie robić

No właśnie. Na jednym kursie typ commituje każdą najmniejszą zmianę. Np. dodanie marginesu - commit. Poprawa literówki - commit. Niby ok, niby rozumiem, ale coś tu jednak boli. Jak to później wygląda w historii? Czy o to właśnie chodzi, żeby logować każdą najmniejszą głupotę? Czy nie robi się później śmietnik, jak coś się chce odnaleźć? Nie hejtuję, tylko dopytuję.

4

Jak to później wygląda w historii?

Nijak bo przed mergowaniem brancha do mastera robisz squash i masz jeden commit z całym feature.

0

W ogóle jaki jest sens przejmować się historia commitow czy jakimiś niepotrzebnym rzeczami zacommitowanymi w lokalnym, prywatnym repo? A druga sprawa - ja wiem, że niektórzy mają jakieś zboczenie CLI, ale przecież w IDE czy innym GUI nie wyobrażam sobie, żeby taka historia się wydarzyła.

0

Cofnąć nie cofniesz, ale git po prostu usunął te pliki więc możesz postąpić dokładnie tak samo jakbyś to ty je usunął i przywrócić je programem do przywracania plików.
Problem taki że po tylu dniach pewnie już sobie nadpisałeś ten obszar dysku.
Na szczęście pół dnia zabawy to jeszcze nie tak dużo, da się pewnie to odtworzyć w 1h bo już masz wszystko przemyślane i ułożone w głowie

btw ja na początku miałem tak ograniczone zaufanie do gita że przed prawie każdą operacja (a zwłaszcza taką którą wykonuję pierwszy raz) najpierw kopiowałem sobie cały folder na bok

1 użytkowników online, w tym zalogowanych: 0, gości: 1