Jak uratować dane przed usunięciem - Git

Jak uratować dane przed usunięciem - Git
MA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 20
0

Cześć,
trochę nabruździłem i szukam pomocy, ale od początku.
Zainicjowałem repozytorium gita gdy już miałem trochę napisane. Wszystko ładnie, dodałem do commita, dodałem origin, po czym uświadomiłem sobie, że nie dałem .gitignore.
Stwierdziłem, że anuluję tego commita, dodam .gitignore i będzie pięknie. ( :( )
Wyczytałem, że zrobię to tak:
git reset --soft HEAD
tak więc zrobiłem, dodałem .gitignore, a w statusie nie ma moich plików (poza dodanymi z okazji .gitignore).
Chwilę pogrzebałem (ugh...m.in. wrzuciłem drugiego commita (tu jeszcze pliki były), potem usunąłem przez GUI i kiedyś znikły..) i zastałem następującą sytuację:

  • nie mam plików na dysku
  • nie mam NIC na repo na githubie (w żadnym momencie nic tam nie było)
    git status pokazuje takie coś:
Kopiuj
On branch master
You are currently reverting commit ad00b93.
  (fix conflicts and run "git revert --continue")
  (use "git revert --abort" to cancel the revert operation)
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    App.config
        deleted:    Form1.Designer.cs
        deleted:    Form1.cs

< tutaj dalsza lista plików>

        deleted:    obj/Debug/ProduktyDoKoszyka.pdb

Unmerged paths:
(use "git restore --staged <file>..." to unstage)
(use "git add/rm <file>..." as appropriate to mark resolution)
deleted by them: .vs/ProduktyDoKoszyka/v16/.suo

Kopiuj

Czy mogę coś zrobić (TERAZ - bo mam kilka koncepcji co MOGŁEM zrobić inaczej, ale już niestety na nie za późno), żeby odzyskać te pliki poza wchodzeniem na listę zmian każdego, tworzenie nowego i kopiowanie z listy zmian?
Przepraszam, jeżeli zbyt rozwlekle, ale starałem się umieścić potencjalne istotne informację. I tak, wiem że nie umiem w Gita. (jeszcze)
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
3

Z powodu konfliktów Gitowi nie udało się w całości cofnąć commitu i zostawił Cię w takim limbo, w którym możesz naprawić konflikty i uruchomić git revert --continue albo ciepnąć tym wszystkim i uruchomić git revert --abort, aby wrócić do ostatniego "stabilnego" stanu.

Jeśli od momentu zrobienia git revert nie zacząłeś wprowadzać żadnych zmian (albo jakieś wprowadziłeś, ale nie boisz się ich stracić), git revert --abort powinno wystarczyć.

Z innych tematów: poczytaj o git reflog.

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
3

Takie przywracanie do ostatniego stabilnego stanu działa też z innymi komendami:

Kopiuj
git merge --abort
git rebase --abort
git cherry-pick --abort

Uratowały mi życie więcej razy niż mogę policzyć :D

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
2

@Magiczny przecież dostałeś krótką instrukcję co możesz zrobić:

Kopiuj
(fix conflicts and run "git revert --continue")
(use "git revert --abort" to cancel the revert operation)
Changes to be committed:
(use "git restore --staged <file>..." to unstage)

A tak na przyszłość, takie brakujące rzeczy w ostatnim commicie łatwiej naprawić przez git commit --amend

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0
Azarien napisał(a):

A tak na przyszłość, takie brakujące rzeczy w ostatnim commicie łatwiej naprawić przez git commit --amend

Albo git commit --fixup= ale tutaj musisz dodać hash commita, mieć włączonego auto-squasha i zrobić interactive rebase jeden commit wstecz przed rzeczonym commitem.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.