延續上篇的說明,在 Git 的世界,任何動作對 Git 來說都可以視為一個「修改」的動作。因此這篇要介紹的 mv 指令概念都是相同的。
複習上篇的刪除檔案 git rm
:
刪除一個檔案 > git rm (暫時區) > git commit(儲存區)
git rm - 告知 git ,我們要「刪除」的檔案有哪些
相同概念套用到更改檔名 git mv
:
重新命名一個檔案 > git mv [舊檔名]+[新檔名](暫時區) > git commit(儲存區)
git mv - 告知 git ,我們要「重新命名」的檔案有哪些
一樣要注意一個觀念,使用 git mv 指令時,檔案需要是已經被追蹤的檔案狀態,存在暫時區中。
git mv
mv 為 move 的意思
🛠 實際操作
直接更改檔名 mv
先確認資料夾內有我們將要更改檔名的檔案,並且確定已放在暫存區
使用 mv
指令,並加上原本的檔名及要更改的檔名
$ mv before.html after.html # 把 before.html 變成 after.html
// mv + [舊檔名] + [新檔名]
先讓我們查看目前檔案狀態 - git status
Changes not staged for commit (deleted)
Untracked files
從訊息回饋來看,可以看到單純的變更檔名對 Git 來說會是兩個動作:刪除 → 新增
狀態為已更改,表示原本提交的 before.html 經刪除動作後,被丟回工作目錄(WD),隨後又新增了一個名字為 after.html 的檔案。此時的檔案是 Untracked files 狀態,並還沒有被 Git 追蹤,因此下一步我們要使用 git add
指令將檔案丟至暫存區。
輸入 git add 指令將上述異動存至暫存區
$ git add --all # 一次加入所有檔案
-A 與 --all 相同
使用 git status
指令查看檔案狀態
此時的檔案狀態為:Changes to be committed(renamed)
在第三步驟我們看到的兩種狀態(Changes not staged for commit / Untracked files)都一口氣變成 Changes to be committed 狀態,且檔案內容沒有變動,因此 Git 可以推測出這一次的動作只是更改檔名,所以狀態為 renamed 。
最後輸入 git commit -m
指令提交至儲存庫即可
回饋裡除了基本的分支、效驗碼、紀錄訊息,也可以看到我們這一次做了怎麼變動:rename before.html => after.html
請 Git 幫忙更改檔名 git mv
我使用終端機在 git_practice 資料夾裡新增一個 before.html 的檔案,並且使用 git add 指令將它加入暫存區。
$ git touch before2.html # 新增一個 before2.html 的檔案
$ git add . # 將 before2.html 加至暫存區
$ git status # 查看檔案狀態
此時檔案狀態為 Changes to be committed(new files) ,位於暫存區。
記得一個觀念就是 git 要做修改的動作時,檔案都是需要為被追蹤的狀態
使用 git commit
將檔案提交至儲存庫,提供一次版本紀錄。
$ git commit -m"訊息記錄" # 將檔案提交至儲存庫
接下來可以使用 git mv 指令將我們想要重新取名的檔案改成新的名字
$ git mv before2.html after2.html # 把 before2.html 變成 after2.html
// git mv + [舊檔名] + [新檔名]
可以發現檔名已經變動成 after2.html ,接下來使用 git status
查看狀態
輸入 git status
指令查看狀態
這時狀態為:Changes to be committed (renamed)
→ 重新命名
git commit
提交檔案至儲存庫,整個流程即完成
⚠️ 在第二步驟如果沒有先提交版本,直接更改檔名的話,Git 會認為依然只是新增一個檔案,沒有變更動過。
以下範例還沒 Commit 就直接更改檔名,後用 git status 指令查看狀態。
第一區塊 - 新增一個 before.html 檔案,git add
加至暫存區,使用 git status
查看狀態。
→ 狀態顯示: Changes to be committed(new file)
第二區塊 - 輸入原本更改檔名的指令 git mv before2.html after2.html
並查看狀態
→ 狀態顯示: Changes to be committed(new file)
第三區塊 - 將檔案提交到儲存庫
→ 變更動作顯示: **create** mode 100644 after2.html
因此我們可以看出,新建檔案後如果沒有先提交 commit 的版本,他的狀態對 Git 來說都是一樣的。「新增」一個檔案。