Ответ 1
Как описано в " Git Internals - Git Objects", каждый раз, когда вы изменяете содержимое файла и добавляете в кэш, вы выполните:
git hash-object -w test.txt
Сохраняет его в сохраненном объекте.
Я просто сделал два git add
последовательно для одного файла, а затем:
C:\Users\VonC\prog\go\src\github.com\VonC\asciidocgo\.git>gfind -mmin -10 -print
.
./index
./objects/4f
./objects/4f/76d586459ec6ffc42257bb4c61d5422051cb10
./objects/61
./objects/61/24401794e7fee613f5a56593a0a8a059b2627a
(Обратите внимание на параметр -mmin
, чтобы найти файлы, измененные только за последние 10 минут)
Я мог бы перечислить те же самые sha1 после каждого git add
с помощью:
git rev-parse :0:abstractNode_test.go
См. git rev-parse
(и Что делает git rev-parse
? "): добавление файла в индекс - только этап 0 (этапы 1, 2 и 3 используются во время слияния для записи, все еще в индексе, общих предков, исходных и целевых версий).
Если я сохраняю содержимое этих двух блоков:
C:\Users\VonC\prog\go\src\github.com\VonC\asciidocgo>
git cat-file -p 4f76d586459ec6ffc42257bb4c61d5422051cb10 > a
git cat-file -p 6124401794e7fee613f5a56593a0a8a059b2627a > b
(Обратите внимание, как я конкатенирую часть '4f/
' пути blob с остальной частью пути, чтобы получить полный sha1)
Разница между a
и b
дает мне дополнительный бит, который я добавил в индекс для того же файла.
torek также упоминает в комментариях:
Другой (мне кажется, проще) способ:
git fsck --lost-found
.
Висячие объекты blob заканчиваются в.git/lost-found/other/
и ужеcat-file -p-ed
.
Вы действительно нашли бы все предыдущие добавления Git, которые вы делали до последнего, который закончился. В моем случае появился только один:
C:\Users\VonC\prog\go\src\github.com\VonC\asciidocgo\.git\lost-found\other>dir
Volume in drive C has no label.
Volume Serial Number is D866-48E1
Directory of C:\Users\VonC\prog\go\src\github.com\VonC\asciidocgo\.git\lost-found\other
25/01/2014 17:31 <DIR> .
25/01/2014 17:31 <DIR> ..
25/01/2014 17:31 16 873 4f76d586459ec6ffc42257bb4c61d5422051cb10