[教學] git-10 刪檔與更名 - 討論區

[教學] git-10 刪檔與更名

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

特種兵

特種兵圖像(預設)

2020-02-28 10:56:09

From:1.161.143.134

觀念

不管是刪除檔案或更改檔名,對 git 來說就是一種更改紀錄而已。

刪檔

平常我們在工作目錄下運作,通常是使用檔案管理之類的程式來處理檔案。

例如按 delete 或利用快顯功能表的刪除都可以,甚至是 shift+delete 的強制刪除也行。

但我這邊選擇用指令在 git bash 下刪檔,目的是讓大家可以知道我做了什麼事,不然平常是不需要特別開 git bash 刪檔的。

$ rm welcome.txt

$ git status                                                                    
 On branch master                                                                
 Changes not staged for commit:                                                  
   (use "git add/rm <file>..." to update what will be committed)                 
   (use "git restore <file>..." to discard changes in working directory)         
         deleted:    welcome.txt                                                 

 no changes added to commit (use "git add" and/or "git commit -a")               

從上面的資訊我們至少看出兩點:

  1. welcome.txt 上面有 deleted 標誌,表示他被刪了
  2. Changes not staged for commit 表示現在的 git 狀態是做了變更但還沒 add 到暫存區,當然也就還沒 commit 了

那就把他加到暫存區吧

$ git add .
# 接著觀察一下狀態
$ git status
 On branch master                                                                
 Changes to be committed:                                                        
   (use "git restore --staged <file>..." to unstage)                             
         deleted:    welcome.txt                                                 

從上面的資訊我們至少看出兩點:

  1. welcome.txt 上面有 deleted 標誌,表示他被刪了
  2. Changes to be committed 表示目前 git 的狀態是已經加到暫存區但還沒 commit 推進倉庫

如果使用 git rm welcome.txt 就是把刪除跟 add 的兩個動作合成一個指令,

實務上很少用,因為我們比較不會在 git bash 下刪檔。

如果使用 --cached 也就是刪除時加上這個參數,

其實不是刪檔,而是移除這個檔案的 git 追蹤,意思就是 git 以後不會再控管他了。

移除追蹤後得到的狀態長這樣:

$ git rm welcome.txt --cached
$ git status
 On branch master
 Changes to be committed:
 (use "git reset HEAD <file>..." to unstage)
 deleted: welcome.txt
 Untracked files:
 (use "git add <file>..." to include in what will be committed)
 welcome.txt

那個 Untracked files 就表示這個檔案已經停止追蹤了。

以上這個 --cached 參數操作我們假設是在其他地方做的不影響原本的工作目錄。

那我們把剛剛刪好檔案的部分 commit 提交上去吧

$ git commit -m '刪除 welcome.txt'                                              
 [master c708443] 刪除 welcome.txt                                               
  1 file changed, 2 deletions(-)                                                 
  delete mode 100644 welcome.txt                                                 

# 看一下 log 
$ git log -1
 commit c708443e21e8fba120ad1437ebc17a3562315559 (HEAD -> master)                
 Author: Logo Kuo <logo@forblind.org.tw>                                         
 Date:   Sun Feb 23 21:51:47 2020 +0800                                          

     刪除 welcome.txt                                                            

參數 -1 就是只列出最新的一筆 log 資訊。

在這裡讓我們先回到過去還沒刪除 welcome.txt 的美好時光吧,因為我們還沒練習改名。

回春指令之後再解釋,因為我們先把重點放在刪檔與更名上。

$ git reset --hard HEAD~                                                        
 HEAD is now at 462682d 沒東西                                                   

$ git log -1                                                                    
 commit 462682ddf12ddebd3e7b4c6796ffb0907560f08b (HEAD -> master)                
 Author: Logo Kuo <logo@forblind.org.tw>                                         
 Date:   Sun Feb 16 13:34:36 2020 +0800                                          

     沒東西                                                                      

$ ls
 welcome.txt                                                                     

真神奇,剛剛的刪除 commit 紀錄不見了,檔案也回來了。目前先理解成紀錄消失就表示沒做過該紀錄的所有動作。

更名

跟上面刪檔一樣,可以用檔案總管的快顯功能表或快速鍵 F2 來變更檔名,

那我們還是先用指令來更名讓大家看得到動作:

$ mv welcome.txt hello.txt                                                      
# 當然還是要看一下狀態
$ git status                                                                    
 On branch master                                                                
 Changes not staged for commit:                                                  
   (use "git add/rm <file>..." to update what will be committed)                 
   (use "git restore <file>..." to discard changes in working directory)         
         deleted:    welcome.txt                                                 

 Untracked files:                                                                
   (use "git add <file>..." to include in what will be committed)                
         hello.txt                                                               

 no changes added to commit (use "git add" and/or "git commit -a")               

雖然是更名,但對 git 來說其實是兩個動作,也就是刪除 welcome.txt 並新增 hello.txt

而且新的檔案狀態是還沒被追蹤。

$ git add .                                                                     
# 剛開始使用 git 最好做每個動作都仔細觀察狀態,這樣我們才知道 git 到底做了什麼                                                                                 
$ git status                                                                    
 On branch master                                                                
 Changes to be committed:                                                        
   (use "git restore --staged <file>..." to unstage)                             
         renamed:    welcome.txt -> hello.txt                                    

git 很聰明吧,知道這只是 renamed 更名動作而已。

當然 git mv welcome.txt hello.txt 也可以合併兩段式指令為一個指令了。

記得要 commit 提交才算是完成整個操作流程喔。

不想改名的話就再改回來再提交囉。