文章出處

前面的話

  本文將以一個簡單實例的形式來介紹Git版本切換

 

初始版本

  首先,在一個自定義的位置,創建目錄a,比如在D盤下

  [注意]本文會用到一些常用的Linux的Shell命令,詳細信息移步至此

  先使用cd d:命令,切換到d盤,然后使用mkdir a命令,在d盤下新建一個名稱為a的文件夾。最后,使用ls命令,查看d盤下的所有文件及文件夾,發現a是存在的,所以操作成功

  然后,使用cd a命令,進入d盤下的a文件夾

  接下來,使用git init命令,初始化一個Git倉庫。創建倉庫的本質就是在當前文件夾下創建一個.git文件夾

  然后使用git status命令,查看當前的文件狀態

  接下來,在a文件夾下,使用touch 1.txt命令,新建一個1.txt文本文件,再使用git status命令,查看當前的文件狀態。在狀態報告中可以看到新建的1.txt文件出現在“Untracked files”下面,表示該文件為未跟蹤的文件

  接著,使用git add 1.txt命令,跟蹤該文件。此時再運行git status命令,會看到1.txt文件已被跟蹤,并處于暫存狀態。只要在“Changes to be committed”這行下面的,就說明是已暫存狀態

  再運行提交命令git commit -m 'add 1.txt',提交文件1.txt。提交后它會提示,當前是在哪個分支(master)提交的,本次提交的完整SHA-1校驗和是什么(beac21a),以及在本次提交中,有1個文件修訂過,0行添改,0行刪改過

  再運行命令git status時,因為文件已經被提交了,所以提示沒有什么可供提交的了,工作目錄很干凈

 

新版本

  接下來,我們使用cat > 1.txt命令,將1.txt文件的內容從無內容修改為'1'。使用git status時,提示當前文件沒有放置在暫存區

  使用git add 1.txt命令,放置在暫存區,再使用git status時,提示1.txt文件已被跟蹤,并處于暫存狀態

  使用git commit -m 'alter to 1'命令,來提交文件1.txt。提交后它會提示,本次提交的完整SHA-1校驗和是f73e651,以及在本次提交中,有1個文件修訂過,1行添改過

  接下來,照貓畫虎,創建1.txt的第三個版本,將其內容修改為'2'并提交。本次提交的完整SHA-1校驗和是74833f8,以及在本次提交中,有1個文件修訂過,1行添改過、1行刪改過

 

查看版本

  現在,我們總共把三個版本的1.txt文件提交到Git倉庫中了

版本1:空內容
版本2:'1'
版本3:'2'

  當然了,在實際工作中,我們處理的文件比較復雜,并不能記得每次都改了什么內容。在Git中,我們用git log命令查看提交歷史

  git log命令顯示從最近到最遠的提交日志,我們可以看到3次提交,最近的一次是alter t0 2,上一次是alter to 1,最早的一次是add 1.txt

  如果嫌輸出信息太多,可以加上--pretty=oneline參數

  git log有許多選項,下表列出了一些常用的選項及其釋義

選項         說明
-p            按補丁格式顯示每個更新之間的差異
--word-diff       按 word diff 格式顯示差異
--stat          顯示每次更新的文件修改統計信息
--shortstat       只顯示 --stat 中最后的行數修改添加移除統計
--name-only       僅在提交信息后顯示已修改的文件清單
--name-status     顯示新增、修改、刪除的文件清單
--abbrev-commit   僅顯示 SHA-1 的前幾個字符,而非所有的 40 個字符
--relative-date   使用較短的相對時間顯示(比如,“2 weeks ago”)
--graph        顯示 ASCII 圖形表示的分支合并歷史
--pretty        使用其他格式顯示歷史提交信息可用的選項包括oneline,short,full,fuller 和format(后跟指定格式)
--oneline        `--pretty=oneline --abbrev-commit` 的簡化用法

  我們常用-p選項展開顯示每次提交的內容差異。可以看到,最近一次更新和上一次更新的區別是將1修改為2。上一次和上上一次更新的區別是從空內容變成內容為1

  有時候圖形化工具更容易展示歷史提交的變化,隨Git一同發布的gitk就是這樣一種工具。它是用Tcl/Tk寫成的,基本上相當于git log命令的可視化版本,凡是git log可以用的選項也都能用在gitk上。在項目工作目錄中輸入gitk命令后,就會啟動下圖所示的界面

 

版本切換

  現在,我們準備把1.txt回退到上一個版本,也就是內容為'1'的那個版本

  首先,Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交(74833f8172d219dbf755dff7cdc64356bff39aad),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100

  現在,我們要把當前版本“alter to 2”回退到上一個版本“alter to 1”,就可以使用git reset命令

  首先,使用cat 1.txt命令查看該文件的內容為'2',接著使用命令git reset --hard HEAD^,將文件返回到上一個版本,再使用cat 1.txt命令查看該文件的內容為'1'

  我們用git log再看看現在版本庫的狀態,發現最新的那個版本“alter to 2”已經看不到了

  如果想返回到最新的版本,可以使用命令git reset --hard commit_id來實現

  但是,如果找到最新版本的1.txt的commit id呢?Git提供了一個命令git reflog,該命令按照之前經過的所有的commit路徑按序來排列,用來記錄你的每一次命令

  從git reflog命令返回的結果中發現,第五行的beac21a是上上個版本的1.txt文件的是commit id,第四行的f73e651是上個版本的,第三行的74833f8就是最新版本的

  下面使用git reset命令,將文件恢復到最新版本

 

總結

  Git允許我們使用命令git reset --hard commit_id在版本的歷史之間切換

  HEAD可以用來替換commit_id,HEAD指向的版本是當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,往上100個版本寫成HEAD~100

  當然了,^和~這兩個特殊符號,除了用在HEAD上外,還可以用在<branchName>上或Commit ID上。如master^,代表master的上一個版本;1f2f476~1代表Commit ID為1f2f476的上一個版本

  可以用git log可以查看提交歷史,或者用git reflog查看命令歷史,以便確定要切換的版本的版本號


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()