Git 版本穿梭 時光穿梭機

2021-10-02 10:06:29 字數 3293 閱讀 4872

當你玩遊戲時,每玩一段時間都會存一下檔以免前面的進度丟失,在打厲害 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 ...