在git中暂存一个分段文件?

时间:2014-01-25 09:50:50

标签: git commit stage

我正在使用git来管理我的项目。在暂存文件时,我对git的工作流程感到困惑。

如果我暂存文件并忘记提交,然后我再次修改文件和阶段并提交,我该如何回滚到第一阶段?

1 个答案:

答案 0 :(得分:3)

如“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分钟以来修改的文件)

我可以在每个git add之后使用:

列出相同的sha1
git rev-parse :0:abstractNode_test.go

请参阅git rev-parse(和“What does git rev-parse do?”):在索引中添加文件仅为阶段0(合并期间使用阶段1,2和3进行记录,仍在索引中,共同的祖先,源和目的地版本)。

如果我存储这两个blob的内容:

C:\Users\VonC\prog\go\src\github.com\VonC\asciidocgo>
git cat-file -p 4f76d586459ec6ffc42257bb4c61d5422051cb10 > a
git cat-file -p 6124401794e7fee613f5a56593a0a8a059b2627a > b

(注意我如何将blob路径的'4f/'部分与路径的其余部分连接起来以获得完整的sha1)

ab之间的差异确实给了我添加到同一文件索引的附加位。


torek还提到in the comments

  

另一种(我认为更容易)方式:git fsck --lost-found
  悬空blob对象在.git/lost-found/other/中结束,并且已经cat-file -p-ed

你确实会找到所有之前的git add你在最终提交之前所做的事 就我而言,只有一个出现了:

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