2014-01-25 58 views
4

我使用git來管理我的項目。而且,在登臺文件時,我對git的工作流程感到困惑。在git中分階段的文件?

如果我執行了文件並忘記了提交,然後再修改那些文件並重新執行階段並提交,我該如何回滾到第一階段?

+0

@BleedingFingers:謝謝! – ThangNguyen

+1

@Beding ingFingers不正確。暫存的文件被添加到對象存儲中,如果沒有提交,它們就會變成未被引用的文件。他們可能會被找回,但問題是如果你想去那個麻煩(即你的生活/工作是否依賴它) –

+0

@NevikRehnel:我們如何能夠恢復它? – ThangNguyen

回答

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分鐘修改過的文件)

我可以列出的那些相同SHA1每個git add與後:

git rev-parse :0:abstractNode_test.go 

參見git rev-parse(和「What does git rev-parse do?「):在索引中添加文件僅爲階段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 

(注意我是如何連接具有路徑的其餘部分的BLOB路徑的「4f/」部分,以獲得完整的SHA1)

ab之間的差異確實給了我添加到同一文件索引的額外位數。


torek也提到in the comments

另一個(我認爲更容易)的方式:git fsck --lost-found
搖晃的斑點物體纏繞在.git/lost-found/other/之內,並且已經是cat-file -p-ed

你確實會發現以前的所有git都是在最後一個git添加之前做的,而最終的那個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 
+2

另一種(我認爲更容易)的方式:'git fsck --lost-found'。懸掛的blob對象在'.git/lost-found/other /'中結束,並且已經是'cat-file -p'-ed。 – torek

+0

@torek很好的一點,我把它列入了更多知名度的答案。 – VonC

相關問題