2012-04-05 33 views
1

我通過Eclipse使用git。我創建了一個新文件,並對現有的版本化文件進行了更改。我承諾並試圖提出更改,但與現有版本文件發生衝突。我無法解決它,所以我最終很難重置回提交之前。這解決了衝突,但也刪除了我創建的新的,未版本控制的文件。有什麼辦法讓文件恢復嗎?我不認爲硬重置會影響未版本控制的文件。未版本化的文件丟失在git硬重置

+1

'git reset --hard'不應影響未版本控制的文件。你確定你在提交之前沒有將它添加到索引中嗎? – 2012-04-05 07:49:03

+0

正如我所說的提交到現有的文件,是的,我也承諾新的文件。是的,我做到了。 – 2012-04-05 07:54:54

+0

我的意思是我加入了索引。 – 2012-04-05 07:55:49

回答

4

git reset --hard不會影響未版本控制的文件,但是一旦您將新文件添加到索引並提交它不再受版本控制,重置爲沒有該文件的提交將會丟失它。您可以通過重置爲添加該文件的提交來重新獲取它。運行git reflog;你會得到這樣的輸出:

7d6d2bd [email protected]{0}: reset: moving to HEAD~1 
4aaf64d [email protected]{1}: commit: new 

[email protected]{1}是你的新提交; [email protected]{0}被重新設置爲舊的。再次重置,以提交失去了新的文件復位(在我的例子,這是[email protected]{1})前:

$ git reset --hard [email protected]{1} 

這將恢復存儲庫是你提交之後,重置前的狀態,因此新文件應該回來。至於你最初想做什麼,有幾種方法可以重置,而不會丟失你在最新提交中添加的新文件。最簡單的方法可能是做一個混合復位,然後結帳:

$ git reset HEAD~1 
$ git checkout . 

混合復位將離開倉庫是你提交之前 - 這樣你就會有舊文件提交的修改,並且新文件將未版本化。結帳將恢復您對舊文件的更改,但由於新文件現在未版本化,因此它將不再使用

+0

謝謝!完善。 – 2012-04-05 08:18:53