2012-02-16 52 views
32

今天我剛開始學習如何使用git,進展順利。爲什麼不把git pull帶回我刪除的目錄?

作爲一個實驗,我使用push上傳兩個目錄(每個包含兩個文件)和兩個文件在根目錄中。這工作得很好。

然後我刪除了我在本地(但不在git上)的兩個目錄之一。當我使用git status它似乎是意識到了這一點:

deleted: test/Testfile.as
deleted: test/Testile2.as

但是當我使用git pull讓我的文件備份,他們似乎並沒有回到我的本地文件夾。我也試過git fetch

我似乎能夠恢復一切的唯一方法是git clone,但這似乎不合邏輯,因爲我需要在本地刪除我的主目錄,然後再次克隆它(或者指定一個新的位置克隆文件)。

什麼是從github上檢索文件和文件夾的適當方式,這些文件和文件夾已被本地刪除?

+1

您可能忽略的一個關鍵概念是推拉的有關轉移*遠程和本地資源庫之間*提交。如果你想處理工作樹和當前簽出的提交之間的差異,那完全是本地操作。 – Cascabel 2012-02-16 05:17:37

回答

48

git pull剛剛合併所取得的提交在工作目錄中,並不會恢復已刪除的目錄(但可能會警告你發生衝突。)

如果你已經在你的工作目錄中刪除的文件夾,你必須做:

git checkout -- test 

找回來。

或者你可以做git reset --hard完全把你的工作目錄到HEAD狀態。

+0

謝謝,這工作。在這個問題的背面,爲什麼當我在本地刪除它們之後'git push'時,git上的目錄不會被刪除? – Marty 2012-02-16 04:09:39

+0

@MartyWallace - 你必須做一個'git rm'並進行刪除,提交和推送。 – manojlds 2012-02-16 04:12:46

3

git pull會在合併中發生變化。把它想象成你修改過的文件。如果您修改了它,git pull並不會用遠程副本替換文件的內容。即使存在相互衝突的變化,它也只是警告你一個快速的轉變。

如果你在刪除是唯一未提交變化的狀態信息庫,並希望撤消它,然後做一個git reset head --hard

或者,如果你有你想要的地方,留下其他的變化,做git checkout -- test

13

您希望將您的存儲庫返回到以前的工作版本。這是git-reset的工作。

git reset --hard 

一定要通過這個useful explanation of git-reset

閱讀你也可以檢查這些文件,如果你想:

git checkout -- test/ 
-1

git reset --hard <commit hash>意味着HEAD將在特定地指向承諾和任何提交你已經做出提交哈希將不可用。這是因爲你指向HEAD來分離提交HASH。如果你強行推送,那麼你將失去所有提交。

注意:在git中使用git reset --hard命令時要小心。

git pullgit checkout
1

除此之外,git revert也將有助於找回被刪除的文件

相關問題