在 git 的世界裡面基本上沒有什麼救不回來的狀況,也就是後悔藥是有得買的。
在之前的章節中多少有提過,例如如何從 status 的狀態放棄,或者 add 加入暫存區的檔案如何排除,
以及已經 commit 的檔案如何修改等等。
這裡稍微整理各種狀況讓大家在出問題時可以先看看這兩篇,找尋你的後悔藥。
從狀態中移除
更動過的記錄檔案不外乎就是修改、刪除、新增檔案與資料夾這些狀況,記得如果有路徑的要輸入完整正確,或者使用相對路徑去表示。
不過對 git 來說事情其實沒有那麼複雜,我們只要分成兩類來看就好,也就是原本存在的跟原本不存在的。
原本存在的
原本存在的,不管是刪除或修改都可以使用 git restore 檔名或資料夾名
來恢復。
使用萬用字元 .
就表示所有的意思,這樣就不用一個個打了。
之前提過使用 git checkout
除了切換分支,也可以恢復檔案,這兩個指令沒有什麼不同,
是因為 checkout 可以切換分支跟回復檔案,當分支跟檔案同名時容易讓人誤解,
當這種情況發生時 checkout 會先作用在分支,也就是無法用這個指令回復檔案。
所以後來的 git 2.23.0 版本開始就多了 restore 讓一個指令就做一件事情比較好記憶跟管理。
也多了 switch 來切換分支,所以這兩個指令就完全取代 checkout 了。
不過參數有點不同,git checkout -b abc
可取代為 git switch -c abc
這樣。
好吧,有點扯遠了,接著來談原本不存在的部分。
原本不存在的
原本不存在的就是新增出來的,也就是 untracked 狀態。順便復習一下,
git 是不管空資料夾的,一定要有檔案才算數,對 git 來說資料夾只是檔案的路徑而已。
新增出來的部分其實直接砍掉就好,因為新增出來的你不想要,
這跟原本存在的不同,原本存在的我們可能只是放棄這一次的修改,並不想刪除它。
而 untracked 的確是這一次新增出來的,可以直接用檔案管理來刪除,
如果想用 git 來刪也可以。
- git clean -d # 刪資料夾
- git clean -f # 刪檔案
- git clean -df # 刪資料夾與檔案
- git clean -ndf # 刪資料夾與檔案之前先列出會刪什麼,不要真的直接刪掉
後面不要接名稱的話就是處理全部的 untracked 部分。
另一招
還記得之前介紹過的 stash 吧,就是工作被打斷,臨時要切到其他分支修 bug 時,
先把目前的內容丟到緩充區,這樣也是有達到回復效果,但 untracked 的部分還是得手動處理喔。
反過來說, clean 也只能處理 untracked 的部分喔。
更名
最後提一下改名字的部分,改名字對 git 來說就是刪掉原本的再新增一個,
在看過上面的內容後,你應該知道該怎麼處理了。
所以你對原本的檔案改名,會產生兩筆紀錄,有趣的是我們 restore 雖然舊檔回來了,
但因為沒有處理 unttracked 新檔的部分,所以會變成在工作目錄裡有兩個檔案內容相同的新舊檔喔。
※最後更新時間:2020-10-01 10:54:58 From:1.161.147.7 By:特種兵
※最後更新時間:2020-10-01 10:56:04 From:1.161.147.7 By:特種兵