20150826 [學習筆記] Git 版本控制(3)
[內容摘要] 版本控制 - 常用的功能
  • 以下操作皆接續 "20150822 [學習筆記] Git 版本控制(2)" 的部份 , 本次的內容如下 : 
  • (一)新增檔案
  • (二)提交變更 / 建立版本
  • (三)查詢歷史紀錄
  • (四)刪除檔案
  • (五)檔案更名
  • (六)顯示索引狀態
  • (七)重置工作目錄(還原所有的目錄及檔案)
  • (八)還原特定目錄或檔案
 
 
[常用指令] Git基本操作
  • git init    建立儲存庫
  • git add .    將工作目錄下的所有檔案(包含子目錄)加入版本控管
  • git add .*    將工作目錄下所有「.」開頭的檔案加入版本控管
  • git status    查詢工作目錄的狀態
  • git commit    提交 / 建立(新)版本
  • git commit -m "版本紀錄的說明文字"    提交 / 建立(新)版本 - 附註"版本紀錄的說明文字"
  • git log    查詢版本的歷史紀錄
  • git log -10    查詢版本的歷史紀錄(限定輸出10筆紀錄)
  • git rm filename    刪除檔案
  • git mv oldname newname    變更檔案或目錄的名稱
  • git reset    重置工作目錄的索引狀態
  • git reset --hard    把工作目錄還原到目前的最新版(上一次提交的版本)
  • git checkout filename    還原檔案
  • git help    查詢常用的指令與參數說明
 
 
[補充資料] 相關指令教學
 
 
 
 

(一)新增檔案

  • 此部份依情況分為"新增全部的檔案"及"僅新增部份的檔案" , 將在下方個別操作 :
 
[前置作業] 準備測試環境
  • [說明] 在本範例中 , 預設工作目錄的路徑為 C:\Users\user\Documents\GitHub\git-demo
  • STEP 1 : 先開啟Git Shell並進入工作目錄內 , 接著再開啟檔案總管 , 將希望提交的檔案移動至工作目錄
 
  • STEP 2 : 此時再用"dir"指令查看一下工作目錄 , 觀察Git Shell介面上的文字變化 , 會發現命令列後面多出了提示 : 
C:\Users\user\Documents\GitHub\git-demo [master]> dir
...
C:\Users\user\Documents\GitHub\git-demo [master +7 ~0 -0 !]>
  • [意義說明
  • master 代表目前工作目錄是 master 分支 , 也是 Git 的預設分支名稱
  • 紅色」的數字都代表 Untracked (未追蹤) 的檔案,也就是這些變更都不會進入版本控管
  • +7 代表有 7 個「新增」的檔案
  • ~0 代表有 0 個「修改」的檔案
  • -0 代表有 0 個「刪除」的檔案
 
 
< 情況一 > 新增全部的檔案
  • 1.  輸入"git add ."指令 , 將檔案加入到 Git 版本控管 : 
git add .    將工作目錄下的所有檔案(包含子目錄)加入版本控管    
  • [意義說明]
  • 工作目錄下所有的檔案、目錄與子目錄下的檔案 , 都會被加入到工作目錄的【索引】或【快取】中
  • 此時並沒有建立任何版本 , 這些檔案只是「即將」被加入 Git 版本庫而已
  • 綠色」的數字都代表 Staged (準備好) 的檔案,也就是這些變更才會進入版本控管
  • +7 代表有 7 個「新增」的檔案將被建立一個版本
  • ~0 代表有 0 個「修改」的檔案將被建立一個版本
  • -0 代表有 0 個「刪除」的檔案將被建立一個版本
 
  • 2.  如果希望查詢工作目錄的狀態 , 可以輸入"git status"來查詢 : 
git status    查詢工作目錄的狀態
 
  • 3.  如果希望重新設定 , 可以輸入"git reset"來重設工作目錄的索引狀態 : 
git reset    重置工作目錄的索引狀態
 
  • 4.  如果希望再重新查詢工作目錄的狀態 , 可以輸入"git status"來查詢 : 
 
 
< 情況二 > 僅新增部份的檔案
  • 1.  假設說我們只希望加入特定檔案或目錄 , 亦或是特定副檔名的檔案 , 我們可以使用下列指令來達成 : 
git add filename    特定檔案加入版本控管
  • 加入"20150823_R_code.R"這個檔案 , 我們輸入"git add 20150823_R_code.R"
 
git add *    將具有特定檔案特徵(以"星號"的前後位置為基準)的檔案加入版本控管
 
[範例1] 條件在星號(*)前面 - 主檔名
    git abc*    將所有檔名以"abc"作為開頭的檔案加入版本控管
[範例2] 條件在星號(*)後面 - 副檔名
    git *.csv    將所有副檔名檔名以".csv"作為開頭的檔案加入版本控管
    
  • 加入所有副檔名為".csv"的檔案 , 我們輸入"git add *.csv" (因為是副檔名 , 要將條件打在星號後面)
 
 
  • 2.  我們可以隨時利用"git status"來查詢工作目錄的狀態
 
 
 
 

(二)提交變更 / 建立版本

  • 在建立版本之前 , 我們需要把希望提交的檔案列入追蹤 , 先輸入"git add ."命令 , 接著再進行以下操作 : 
 
  • 1.  輸入"git commit"指令來建立版本 , 會在螢幕上出現一個記事本視窗 : 
git commit    提交 / 建立(新)版本    
  • [意義說明]
  • 在 Git 版本控管中 , 所有的版本都必須有「版本紀錄的說明文字」 ( 簡稱 Log )
  • 直接輸入 git commit 的話 , 預設會開啟 Notepad (記事本) 讓你輸入版本訊息 ; 開啟後的檔案內會有很多 # 符號開頭的文字 , 這些都是註解 , 不會成為 Log 的一部分
  •  
  • 2.  讓我們在記事本裡輸入"My first commit 第一次版本提交" , 接著再按Ctrl+S儲存文字檔 , 最後再關閉記事本 : 
  • [注意] 當你按下 Ctrl+S 儲存這個文字檔時還不會建立新版本 , 要在關閉 Notepad 視窗後才會正式建立
  •  
  • 3.  建立版本完後 , Git Shell 的提示就只剩下 [master] 字樣了 , 代表目前已經沒有任何要被建立版本的索引或快取 : 
 
 
 
 

(三)查詢歷史紀錄

  • 由於我們剛剛建立了一個版本 , 當我們想要查詢版本的歷史紀錄時可以輸入以下指令 : 
git log    提交 / 建立(新)版本    
  •  
 
 
 

(四)刪除檔案

  • 在這裡我們想刪除"20150823_R_code.R"這個檔案 , 我們輸入"git rm 20150823_R_code.R" : 
git rm filename    刪除檔案    
  • [指令說明]
  • 當執行 git rm 的指令時 , 會同時進行以下兩件事 : 
  • 刪除工作目錄快取的 "20150823_R_code.R" 檔案 (用來標示這個刪除檔案的動作要列入版本控管)
  • 刪除工作目錄下的 "20150823_R_code.R" 實體檔案 (代表真的把這個實體檔案給刪除)
 
 
 
 

(五)檔案更名

  • 在這裡我們想把"test"這個資料夾更名成"git-test" , 我們輸入"git mv test git-test" : 
git mv oldname newname    變更檔案或目錄的名稱    
 
 
 
 

(六)顯示索引狀態

  •  如果希望查詢工作目錄的狀態 , 可以輸入"git status"來查詢 : 
git status    查詢工作目錄的狀態
 
 
 
 

(七)重置工作目錄(還原所有的目錄及檔案)

  • 雖然利用 git reset 可以重置目前工作目錄的索引狀態 , 但是這個指令預設只會重置「索引狀態」,之前被更名或刪除實體目錄或實體檔案無法被救回來 , 這時候利用"git reset --hard"指令可以把工作目錄還原到上一個版本
git reset --hard    把工作目錄還原到目前的最新版(上一次提交的版本)
  • 輸入"git reset --hard"來還原上一個版本的工作目錄狀態 :
 
 
 
 

(八)還原特定目錄或檔案

  • 如果編輯到一半發現檔案被改壞了 , 希望能還原成沒修改前的版本 , 可以利用以下指令 : 
git checkout filename    還原檔案
  •  
[示範] 還原指定的檔案
  • 這是目前的工作目錄 , 我們要刪除"20150823_R_code.R"和"data.csv" ; 之後只還原"data.csv"這個檔案 : 
 
  • 1.  我們先把"20150823_R_code.R"和"data.csv"這兩個檔案刪除 : 
 
  • 2.  我們想還原"data.csv" , 請輸入"git checkout master data.csv" , 之後再用dir指令查詢工作目錄 , 可以發現檔案已經被還原回來了 : 
  • [意義說明
  • 由於先前已經把"20150823_R_code.R"和"data.csv"刪除了 , 但是我們希望只救回"data.csv"這個檔案 , 所以我們使用"git checkout master data.csv"這段指令 , 意思是把 master 分支中最新版的"data.csv"給還原(這樣可以避免使用 git reset --hard 一次把所有檔案都給還原了! )
  • 請注意 , 還原的過程也會一併復原工作目錄的索引狀態喔!
  •