當你玩遊戲時,每玩一段時間都會存一下檔以免前面的進度丟失,在打厲害 boos 前,你也會選擇存檔,以免打不過而丟失進度,這個存檔被稱為 「快照」。git 允許你
commit
後的倉庫自由前進後退版本,當你從 0 到 1 完成乙個專案時,其中難免會出現修改多次,還有可能會出現檔案誤刪丟失等問題,只要你正確的存檔,那麼 git 就能讓你有後悔藥吃,不至於以前的**全部白寫。
如果你想進行版本回退或前進,首先你需要知道如何檢視歷史,鍵入git log
命令可列出:
$ git log
我一共commit
提交了兩次版本,如下:
commit d5cbf24b3712f1524555b9b71f2937e7d62bbfc8
author: 王佳斌 date: tue jan 28 17:12:45 2020 +0800
this is a demo!
commit f39fca8aebabdc353ac82d21feb9758e6953ffcd
author: 王佳斌 date: tue jan 28 12:31:33 2020 +0800
this is a test.
第一行commit
後面一串**是 雜湊值(hash function) ,它是每個版本的唯一索引。
第二行author
是提交的使用者名稱及郵箱。
第三行date
是提交的時間及日期。
this is a demo!
是commit
提交時的版本介紹資訊。
當然,你也可以使用git log --pretty=oneline
以更簡潔的排版來列印歷史:
$ git log --pretty=oneline
結果如下:
d5cbf24b3712f1524555b9b71f2937e7d62bbfc8 this is a demo!
f39fca8aebabdc353ac82d21feb9758e6953ffcd this is a test.
可以看到,省去了作者及時間,只留下了雜湊值與版本介紹。
有時候為了視覺安全起見,可使用git log --oneline
顯示不完整的雜湊值來列印歷史:
$ git log --oneline
結果如下:
d5cbf24 this is a demo!
f39fca8 this is a test.
可以看到,顯示了不完整的雜湊值。
在正題之前,我們還需要做一些準備工作,模擬幾個提交版本。
注意:如果你本地有提交歷史,那麼你可以不做下面的準備工作。一、工作區新建乙個
project.txt
,該檔案中寫入one
字元,新增暫緩區後提交:
$ touch project.txt
$ vim project.txt
$ git add project.txt
$ git commit -m "one"
二、修改project.txt
,該檔案中刪除one
字元並寫入two
字元,新增暫緩區後提交:
$ vim project.txt
$ git add project.txt
$ git commit -m "two"
三、修改project.txt
,該檔案中刪除two
字元並寫入three
字元,新增暫緩區後提交:
$ vim project.txt
$ git add project.txt
$ git commit -m "three"
我們總結一下,我們的專案檔案project.txt
已經有了 3 個版本,每個版本都已經標識。
目前,我們處在three
第 3 個版本。假設我已經後悔了,現在要回到最初的one
第 1 個版本。用一句簡單明瞭的話闡述版本穿梭。根據版本索引值,移動 head 指標來達到版本穿梭。
一、列印歷史日誌:
$ git log --pretty=oneline
我們 3 次提交的歷史,都被 git 管理並列出,:
878aab479d97cd8c2bbb4366dc2c5d65c3c639d7 three
2c3da06a3e3bc8f8ed2768398188d24c3efe848d two
94de44d2e1a9f7d6a9a9f237d553c29983be1f67 one
二、恢復one
版本前,我們先看一下當前檔案中有什麼:
$ cat project.txt
結果:
three
假想一下,如果版本回退到了one
,那麼內容是不是變成了one
呢?
三、根據雜湊值索引,移動 head 指標回退:
$ git reset --hard 94de44d2e1a9f7d6a9a9f237d553c29983be1f67
git 提示,指標(head) 現在在 one,也就是成功了:
head is now at 94de44d one
四、測試,檢視當前project.txt
檔案中有什麼:
$ cat project.txt
# one
這樣,我們就完成了一次版本的回退,你可以自由在各版本中隨意穿梭。 Git 時光穿梭機01
看這篇文章之前可以先閱讀 建立版本庫這篇文章 我們已經成功地新增並提交了乙個readme.txt檔案,現在是時候繼續工作了,於是,我們繼續修改readme.txt,改成如下內容 git is a distributed version control system git is free softw...
git reflog 時光穿梭機
一 問題描述 二 解決 小白花費一周時間做了git log如下所示6個功能。commit的資訊就是做了6個功能,每個功能對應乙個commit的提交,分別是feature 1 到 feature 6 然後執行強制回滾,git reset hard 2216d4e。回滾到了feature 1上,並且回滾...
Git 時光穿梭機之刪除檔案06
在git中,刪除也是乙個修改操作,我們實際操作一下吧,先新增乙個檔案test.txt到git並且提交 git add test.txt git commit m add test.txt master cc0f8c9 add test.txt 1 file changed,0 insertions ...