Portál AbcLinuxu, 10. května 2025 01:12
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.