2012-03-17 140 views
16

昨天我說我在主分支上做了一些改動,我忘了添加,提交它們。並在早上我是否仍可以在git中恢復已刪除的未跟蹤文件?

git reset --hard 

是否有可能在這種情況下恢復被刪除的文件?

+1

如果發生了什麼'git的add'這些文件在某些​​時候,即使你從來沒有承諾他們,他們仍然會被周圍,直到他們收集的垃圾(約兩週)垂下斑點。 'git fsck'會將對象列爲[dangling or unreachable](https://stackoverflow.com/a/36671659/712526)。然後你可以使用'git cat-file -p deadbeef> old-file-name'來恢復它們。 – jpaugh 2017-08-23 19:36:15

+0

([Pod的答案](https://stackoverflow.com/a/45815093/712526)已經涵蓋了這個,哎呀!) – jpaugh 2017-08-23 19:48:18

+0

可能重複:https://stackoverflow.com/q/25791533/712526 – jpaugh 2017-08-23 19:49:29

回答

42

一些更好的IDE會將您的文件作爲本地歷史記錄進行跟蹤。如果您從外部刪除文件(例如,git reset),您應該能夠在父目錄的IDE上單擊並選擇「與本地歷史記錄進行比較」。

PHPStorm IDE成功使用此功能時,我未跟蹤文件已經被一些實用消滅了......

+4

對於Eclipse,導航到文件所在的文件夾/包(Project Explorer或Package Explorer視圖),右鍵單擊,然後從上下文菜單中選擇「從本地歷史記錄中恢復...」。 – 2014-12-30 22:47:00

+2

omg ...你救了我的命。我在一個零提交項目中使用'git reset --hard',這意味着'git fsck --lost-found'不起作用。幸運的是,我閱讀你的答案,並在WebStorm中使用'恢復歷史記錄',併成功得到了擦除代碼... – 2016-05-30 12:20:04

+2

總是很高興聽到我的回答貢獻了一個「快樂結局」:) – 2016-05-31 05:58:49

11

否...................事實並非如此。

4

git reset --hard是一個非常危險的命令,所以要小心,當你使用它下一次:)

如果你沒有犯任何這些文件,好像你就沒有機會恢復。

否則,reflog命令可以幫助你。

1

,你不能訪問到以前的版本從混帳未跟蹤刪除的文件,因爲coruse,他們不存在。我會從一些備份中恢復它們(也許還有隱藏在IDE /編輯器中的備份文件?),或者,我會避免在該文件系統上工作太多,並開始搜索恢復工具。

+1

編輯好!我從文件中意外丟棄了未跟蹤的更改(詛咒Github應用程序),但意識到我仍然在Atom中打開了該文件,並且可以直接點擊「撤消」來恢復我的更改。 – henrebotha 2016-04-29 09:03:16

+0

@henrebotha,嗨!這只是發生在我身上,但不幸的是我沒有在git硬重置時打開我的原子,你知道我可以保存的任何可能的方式。非常愚蠢的是,我在未跟蹤的文件中有大量的東西。 – 2017-06-15 18:27:10

+0

@ gdad-s-river您應該仍然可以在事後打開Atom並且點擊'撤消',只要您在Atom中編輯了文件。 – henrebotha 2017-06-19 06:50:50

1

git reset --hard不會刪除未跟蹤的文件。然而,git clean將會。

不過,如果你git add的文件,不要git commit它們,然後運行git reset --hard這些文件丟失。

但沒關係,因爲它們可以恢復,如this answer所示。 (那麼,直到下一個git gc)。

2

注意:。的步驟似乎已經改變了一下,因爲公認的答案被張貼但這個想法是一樣的

要添加到接受的答案,我能使用Webstorm 2016恢復我刪除的文件。

  1. 首先,我丟失了我的文件,使用git git clean -f進行強制清理。
  2. 要恢復它,我在Webstorm去了,做了以下步驟:

    • 轉到項目爲您的項目選項卡上,單擊鼠標右鍵獲得到「查看歷史」下「地方史」。 (As shown in this picture.

    • 單擊「顯示歷史記錄」後,可以看到彈出窗口中顯示「外部更改 - >恢復」。單擊以恢復右側所需的文件。(As shown in the attached picture.

    • 經過以上2個步驟後,您應該會看到您的文件回到'項目'選項卡。彈出的「本地歷史」將顯示如附圖所示的內容。 Reverted to External Change你會得到一個選項讓它添加到Git中。

    • 要解開它,只需從命令行執行git reset HEAD <filename>即可。