Nie ma czegoś takiego jak 'usunąć wybrane commity, ale nie usuwać plików'.
Owszem, jest, nazywa się "rebase".
git rebase -i HEAD~liczba_commitow
Przykładowo: używając
HEAD~5, zrobisz rebase na ostatnich pięciu commitach.
Generalnie, git ma co najmniej dwie historie: jedna to jest ta klasyczna, którą znają wszyscy. Druga, to jest "historia historii" o nazwie "reflog":
git reflog
Stamtąd można cofać wszelkie zmiany tak długo, jak długo istnieją lokalnie. Zmiany w reflogu nie ulegają kopiowaniu przy wywołaniu
git clone. Generalnie, reflog służy do tego, żeby cofnąć się do absolutnie dowolnego stanu repozytorium, tak długo, jak długo nie skasujesz lokalnej wersji.
Dobra już wszystko zepsułem przez ChataGPT xD
Jeśli nie zniszczyłeś lokalnej wersji, to reflog z pewnością ma stan, w którym wszystko było prawidłowe, zanim zostało zepsute.
Bo czasem wrzucałem mały commit i słabo to wyglądało.
Jeśli używasz rebase'a, no to wtedy komenda "squash" łączy zmiany z dwóch commitów w jeden. Ewentualnie, jeśli zmiany są na szczycie, to ja zwykle po prostu dopisuję wszystko do ostatniego commita.
git reset --soft HEAD~liczba_commitow
To jest tak zwany "miękki reset", który powoduje tyle, że cofasz się w historii o tyle commitów, ile podasz, no i potem możesz zgarnąć wszystkie takie zmiany w jeden commit. Jest też "twardy reset", który po prostu wywala commity w powietrze i różni się tym, że zamiast słowa "soft" wstawiasz po prostu "hard".
Jeżeli nie chce działać edytor
Warto zauważyć, że zwykle masz wprost podaną przyczynę, dlaczego coś nie działa i przeczytanie komunikatu błędu wiele tutaj ułatwia. Na przykład, jak masz konflikty, to wprost masz podane pliki, w których to występuje. Ba, nawet te "dziwne strzałki" zaznaczają dokładnie, które linijki się nie zgadzają.
czy można przywrócić stan projektu do wybranego commita ?
Na twardo? No to tak:
git reset --hard hash_commita
Nawiasem mówiąc, polecam poczytać jakąś książkę o gicie:
https://goalkicker.com/GitBook/Dopisano:Dodam więcej: polecam założyć sobie jakieś małe, osobne repozytorium, przeznaczone tylko i wyłącznie do eksperymentów z gitem. Wstawiasz tam sobie jakiś plik tekstowy typu "ala ma kota", dopisujesz zmiany, masz dwa commity, próbujesz je połączyć, rozdzielić, zamienić, poprzestawiać gałęzie i zrobić wszelkie inne sztuczki, których chcesz się nauczyć. A jak się z tym oswoisz, to dopiero wtedy warto ruszać właściwe repo.