Jak uratować dane przed usunięciem - Git

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ś:
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


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)
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.

3

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

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

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

2

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

(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

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.

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