[教學] git應用-後悔藥有得買1 - 討論區

[教學] git應用-後悔藥有得買1

文章瀏覽次數 1133 文章回覆數 0

特種兵

特種兵圖像(預設)

2020-08-15 13:58:55

From:1.161.134.79

在 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:特種兵