2017-07-28 114 views
1

我是新來的混帳。我對集中式CVS如TFS和SourceGear Vault有豐富的經驗。如何使用git撤消掛起的更改?

我在本地使用git(無遙控器)。今天,我試圖恢復自上次提交以來所做的所有更改,這使我的項目變得非常混亂。

我的存儲庫存儲文檔,VS項目和一些其他開發工件。總共有幾千個文件。

如何使用git恢復上次提交(撤銷掛起的更改說TFS)整個存儲庫? git resetgit checkout只是搞砸了我的文件,所以我不得不使用我的文件級備份。

通過撤消更改我的意思是:

  • 恢復,因爲編輯上次提交
  • 添加自移除的最後一個提交補充
  • 刪除文件,因爲上次提交上市

項目文件的文件。 gitignore文件不應該受到影響。

是否可以在文件夾(+子文件夾)級別而不是存儲庫級別上進行這樣的恢復?

隨着保險櫃我可以標籤一個文件夾(+子文件夾),後來我可以回到那個標籤的狀態。這可以用git來完成嗎?

還有一個簡單的問題 - 我可以查看文件夾中的已刪除文件並根據需要恢復它們(來自一些較舊的提交)?我沒有設法做到這一點git stategit log

回答

3

如何使用git恢復上次提交(撤消掛起的更改說TFS)整個存儲庫? git reset和git checkout只是搞砸了我的文件,所以我不得不使用我的文件級備份。

另一種方法是git checkout,看到the documentationgit的結帳 - 開關分支或恢復工作樹中的文件。例如:git checkout -- .檢出當前分支中的所有文件,因此恢復其狀態。

是否可以在文件夾(+子文件夾)級別而不是存儲庫級別進行這樣的恢復?

是,git checkout -- path/to/folder

有了保險櫃我可以標記一個文件夾(+子文件夾),然後我可以回到那個標記的狀態。這可以用git來完成嗎?

我只知道基於存儲庫的tags。但是,您可以簽出該特定標籤(或提交)的文件夾:git checkout tags/v1.0.3 -- pathgit checkout commit -- path

我可以查看文件夾中刪除的文件,並將其恢復爲需要(從更早的提交)?我沒有設法做到這一點與git狀態或git日誌。

例如,使用git log --name-status。假設我在某些提交中刪除了README.md,它將顯示爲D README.md。假設它在提交時被刪除abc123,然後abc123〜1是之前的提交(其中README.md仍然存在)。在刪除之前,您可以使用git show abc123~1:README.md在提交中查看該文件的內容。一種簡單的方法來恢復它:git show 5235de78d28a07d2459130e7e3041b7720563b5d~1:README.md > README.md

,我可以查看已刪除的文件一個文件夾在...

git log --name-status -- path/to/folder

+0

謝謝你的詳細解答。 –

0
git reset --hard HEAD 

應該這樣做。該命令會將您的所有文件重置爲您在上次提交時的狀態。

+0

這是我做了第一次。 'git log'然後'git reset --hard 2f34 ...',其中2f34 ...來自上次提交。它只是爲整個回購恢復了一些非常舊的數據。我只是需要一個文件夾。 –