Portál AbcLinuxu, 4. listopadu 2025 23:22
git init a git add *. V seznamu byly i soubory, které jsem verzovat nechtěl. Tak jsem zadal git rm * a to byla chyba. Zmizelo mi vše.
V repozitáři však vidím archivní soubory, které by mohly obsahovat moje data. Je možné ta data z nich dostat nebo se s nimi mám definitivně rozloučit?
commit, tak pochybuji
(u mě git rm * při použití na "necommitly" data vypsal chybu)
zkusil bych spustit např. gitk (v příslušným adresáři) jestli něco nevypíše
git status?
Ak si dal git rm hneď po git add, t.j. ešte pred git commit, git sa pravdepodobne sťažoval a vyžadoval parameter -f (force), aby tie súbory skutočne vymazal z indexu i pracovnej kópie, keďže v repozitári, odkiaľ by sa dali prípadne obnoviť. Ak si mu to -f zadal, vymazal si si súbory.
V repozitáři však vidím archivní soubory, které by mohly obsahovat moje data. Je možné ta data z nich dostat nebo se s nimi mám definitivně rozloučit?V repozitári ich vidíš ako? Použil by som
git log --stat, našiel ich poslednú verziu, checkoutol príslušný commit (git checkout commit-id). Ak skutočne boli commitnuté a neskôr vymazané, musí byť v histórii commit, ktorých ich zmazal, ten by stačilo revertnúť.
.git/objects/ vidím soubory, které velikostí i počtem odpovídají pohřešovaným souborům. Utilita file je označuje jako VAX COFF executable. Kdyby to bylo v gzipu, tak bych si s tím poradil, ale tento formát neznám.
git log --stat dává prázdný výsledek.
git reflog?
git cat-file -p sha1
git rev-list --objects --allA při troše štěstí tam uvidíš i názvy ztracených souborů. Zobrazené objekty mohou různého typu (blob, tree, commit, tag), tebe budou zajímat blob a tree. Blob je tvůj ztracený soubor, tree je adresář. K získání obsahu objektů použij "git cat-file -p nazev-objektu". S průzkumem obsahu všech objektů ti pomůže toto:
git rev-list --objects --all \
| awk '{cmd="git cat-file -t "$1;cmd |& getline t; printf("%s %-7s %s\n", $1, t, $2); close(cmd);}' \
| less
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.