章節 12 取得舊版本

學習目標

還原到之前的任何一個版本是非常簡單的。 checkout 指令可以從檔案庫中複製任何時間點的快照(當下時間點的檔案內容和所有記錄)到工作目錄中。

取得版本的 hash 編碼 01

執行:

git hist

注意: 記得您已經定義了 hist 在您的 .gitconfig 檔案了嗎? 如果沒有請回顧之前的章節設定別名。

輸出:

$ git hist
* 4054321 2012-03-06 | Added a comment (HEAD, master) [Jim Weirich]
* 1b754e9 2012-03-06 | Added a default value [Jim Weirich]
* 3053491 2012-03-06 | Using ARGV [Jim Weirich]
* 3cbf83b 2012-03-06 | First Commit [Jim Weirich]

找到注解為 first commit 對應的 hash 您可以把 hash 當成是一個對應的 ID 。 一般來說他會在最後一行。 使用 hash 編碼配合下面的指令來回復版本( hash 編碼看起來很長,實際上在下指令的時候您只需要前七個字元就夠了 )。回復之後觀察一下 hello.rb 檔案的內容。

執行:

git checkout <hash>
cat hello.rb

注意: 有些指令只有在 Unix like 系統底下才能使用 例如: cat 不幸的是 Windows的使用者可能要對應系統預設的指令像 ls 對應 dir,但您安裝其他工具像是 Cygwin ,git bash 之類的東西。

注意: 很多指令會用到檔案庫的 hash 編碼。 由於您檔案庫中的 hash 和本文件中會有很大的不同,所有<hash>或者<treehash>的地方,都需要您自行替換成您查閱到的值 。

您將會看到 …

輸出:

$ git checkout 3cbf83b
Note: checking out '3cbf83b'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 3cbf83b... First Commit
$ cat hello.rb
puts "Hello, World"

checkout 指令輸出了目前完整的狀態。 舊版的 git 可能會沒有本機的分支資訊。不過,現在您不需要擔心這個。

注意 hello.rb 檔案的內容已經回到舊版了。

還原到主分支最新的版本02

執行:

git checkout master
cat hello.rb

您將會看到 …

輸出:

$ git checkout master
Previous HEAD position was 3cbf83b... First Commit
Switched to branch 'master'
$ cat hello.rb
# Default is "World"
name = ARGV.first || "World"

puts "Hello, #{name}!"

‘master’ 是主分支預設的名稱。使用分支名稱來簽出就會取得該分支最新的版本(檔案)。

目錄