Git基本操作(2)

Git

刪除檔案

前篇(1)提到,若要退追蹤,可以使用

git rm --cached 'FILE_NAME'


裡面的--cached表示要刪(rm)的是將tracked檔案刪改為untracked狀態


但不會真的刪掉本機檔案


假如沒加--cached,就會真的刪本機檔案

git rm 'src/components/ui/ShouldDeleted.vue'
//執行後會出現下面這行
rm 'src/components/ui/ShouldDeleted.vue'


此時的狀態為:git status

On branch master
Changes to be committed:
 (use "git restore --staged <file>..." to unstage)
    deleted:  src/components/ui/ShouldDeleted.vue
用rm的方法,會直接stage file,不須再透過git add 'FILE_NAME' stage一次


提交新的commit來commit此次的delete動作後,便完成刪除


如何還原?

先介紹git reset用法

$ git reset [<mode>] [<commit>]


先說明 [<mode>] ,<mode>預設值為 --mixed

--mixed:會重置index( = staging area),但不會重置working tree( = working directory),改變HEAD位置至[<commit>],更動的檔案會被保留為更動後的狀態(Unstaged)。此時取消變更(例如git restore "FILE_NAME")便可將working tree還原至[<commit>]版本的狀態。


--soft:不更動下指令時的index跟working tree,只改變HEAD位置至[<commit>],而其間有被更動的檔案會是Staged(呈現等待Commited的狀態),亦即leaves all your changed files "Changes to be committed". 當作移動HEAD用的~


--hard:重置index跟working tree,改變HEAD位置至[<commit>],那些被tracked的檔案在此[<commit>]後所做的變動都會被捨棄。版本還原利器!


--soft為操作範例如下,被更動的檔案已經處於Staged且未Commited的狀態

git reset --soft 2fc9bad
git status
//顯示如下
On branch master
Changes to be committed:
 (use "git restore --staged <file>..." to unstage)
    new file:  src/components/ui/ShouldDeleted.vue


如何查看操作紀錄?

常用有兩種,git refloggit log


git log顯示當前提交(commit)紀錄,可加 --oneline 方便可閱讀,-n設定顯示最新的n筆commit。

PS E:\前端學習\Vue Practice\project-find-a-coach> git log --oneline
2fc9bad (HEAD -> master) 再次嘗試刪除ShouldDeleted.vue
9a595aa add shouldDelete file
19fb8e5 modify Not found 0..0
1c31ab4 run git clean -df
49923eb test untrack
bc9cc4f 退追蹤
7d66845 initial version


git reflog檢視本地所有commit紀錄,包含變更,案Q可以離開檢視狀態----還原的救星!

PS E:\前端學習\Vue Practice\project-find-a-coach> git reflog -10
2fc9bad (HEAD -> master) HEAD@{0}: reset: moving to 2fc9bad
9a595aa HEAD@{1}: reset: moving to 9a595aa
97c1d77 HEAD@{2}: reset: moving to 97c1d77
c1a9ddc HEAD@{3}: reset: moving to c1a9ddc
9a595aa HEAD@{4}: reset: moving to 9a595aa
97c1d77 HEAD@{5}: reset: moving to 97c1d77
9a595aa HEAD@{6}: reset: moving to HEAD~2
97c1d77 HEAD@{7}: commit: 改notfound之後要來測試reset --hard
2fc9bad (HEAD -> master) HEAD@{8}: commit: 再次嘗試刪除ShouldDeleted.vue
9a595aa HEAD@{9}: reset: moving to 9a595aa


假設你開發到0.1.3版,覺得0.1.2版畫面比較好,reset回去0.1.2後,業主又說還是0.1.3的好看...


此時可使用git reflog調出0.1.3的SHA-1 tag(英數混合的那串代碼)


再一次使用git reset --hard '目標tag'便能還原回0.1.3版本


Note:把git reset當作是切換不同Commit的工具


--待續--


© 2021 Hamsterism. All rights reserved github