Создает поэтапный файл в git?

Я использую git для управления моим проектом. И я запутался с рабочим процессом git при размещении файла.

Если я поставил файлы и забыли фиксацию, а затем я снова и снова модифицирую эти файлы и этапы и зафиксирую, как я могу вернуться к первой постановке?

Ответы

Ответ 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