2013-01-24 59 views
2

當我讀到關於如何使用git的儘可能多的資源時,我還沒有遇到過任何文章,這表明如果需要時可以回滾。因此,例如我已經初始化我的工作目錄中的git目錄,即git init是否可以檢索添加到索引的文件?

然後我添加文件到git的索引,即git add .。這已將所有文件添加到git的索引。現在,而不是將文件提交到git的存儲庫,即git commit,我對添加到索引的文件之一進行了更改。我意識到我犯了一個錯誤。我可以回滾到以前的狀態,還是隻有在我提交了該文件時纔可以這樣做?我的理解是,當我運行命令git add .時,在git的對象存儲中創建了一個或多個文件的副本。我相信對象存儲中的文件是壓縮的。這是否意味着我可以從對象庫中回滾?

回答

2

是的,你可以。嘗試

git checkout-index -f foo 

從索引結算foo。或

git checkout-index -fa 
+0

foo是我添加到索引的文件嗎?當我檢出文件時會發生什麼?它會覆蓋我的更改嗎?它合併它們嗎? – PeanutsMonkey

+0

是的。它會覆蓋工作目錄中的文件,而不是合併。 – dyng

+0

它會壓倒他們。 '-f'是爲了強制操作以防文件已經存在。 – LopSae

1

使用git checkout籤的所有文件,無需指定樹十歲上下會從索引中檢出。

+0

抱歉,您是n00b。這是什麼意思? – PeanutsMonkey

+0

通常,您可以使用'git checkout '檢出分支,標記,HEAD或特定提交。如果您不使用該參數,則檢出的內容將來自索引。什麼是樹狀檢查:http://stackoverflow.com/questions/4044368/what-does-tree-ish-mean-in-git – LopSae

2

使用

git checkout -- <file> 

丟棄在工作目錄,同時保持變化指數的變化。

+0

是''我添加到索引文件的名稱? – PeanutsMonkey

1

我對這個問題很感興趣,答案似乎是「是」,git add將該文件的副本放入存儲庫中,即使未在存儲庫中進行提交,也可以回滾該文件,下面的例子。

% mkdir test && cd test 
% git init . 
% echo "1" > test.txt 
% git add test.txt 
    - git status shows now "added" file 
% echo "2" > test.txt 
    - git status shows "added" and "modified" file, test.txt contains number 2 
% git checkout test.txt 
    - git status shows only "added" again, and test.txt contains the number 1 
相關問題