Git學習第二章第二節

2021-08-17 17:16:54 字數 2626 閱讀 6885

你不斷對檔案進行修改,然後不斷提交修改到版本庫里,就好比玩rpg遊戲時,每通過一關就會自動把遊戲狀態存檔,如果某一關沒過去,你還可以選擇讀取前一關的狀態。有些時候,在打boss之前,你會手動存檔,以便萬一打boss失敗了,可以從最近的地方重新開始。git也是一樣,每當你覺得檔案修改到一定程度的時候,就可以「儲存乙個快照」,這個快照在git中被稱為

commit

。一旦你把檔案改亂了,或者誤刪了檔案,還可以從最近的乙個

commit

恢復,然後繼續工作,而不是把幾個月的工作成果全部丟失。-----------------廖雪峰git教程 原文

在git工具中我們可以去檢視我們的歷史修改記錄,使用git log命令實現。

$ git log

commit 16d1d2014fa1c75f51ed976c5217b9c9623460c3 (head -> master)

author: whatbutway date: tue mar 27 16:22:19 2018 +0800

add a line to test

commit 4cf9a978bccfb14b68930470ffedcba939d78bd0

author: whatbutway date: tue mar 27 15:10:59 2018 +0800

add a line

commit 7a04cc4992a1d279f0b2bde88447dc525de479c4

author: whatbutway date: tue mar 27 10:58:42 2018 +0800

wrote a readme file

如果修改過很多次的話可以按上下方向鍵控制顯示,按q退出歷史記錄列表。

從列印的log可以看出我們列印出的記錄是從當前時間依次往前推提交的版本更改記錄。如果嫌輸出資訊太多,看得眼花繚亂,可以試試加上--pretty=oneline 不過這種方式不會列印時間戳和提交人。

首先,git必須知道當前版本是哪個版本,在git中有(head->master)的表示當前版本,我們用命令時head表示當前版本,上乙個版本用head^表示,上上個版本用head^^表示,當然往上數更多的版本容易數不過來,所以寫成head~100代表上數第一百個版本。

$ git reset --hard head^

head is now at 4cf9a97 add a line

其中 at4cf9a97這個是剛才列印log時上個版本commit id的前幾位,後面的add a line是我們提交時做的說明。

$ git log

commit 4cf9a978bccfb14b68930470ffedcba939d78bd0 (head -> master)

author: whatbutway date: tue mar 27 15:10:59 2018 +0800

add a line

commit 7a04cc4992a1d279f0b2bde88447dc525de479c4

author: whatbutway date: tue mar 27 10:58:42 2018 +0800

wrote a readme file

之前的版本不見了,有辦法找到剛才被刪的版本,可以順著往上找,找到那個想要的版本的commit id,然後就可以用這個id退回那個版本。

$ git reset --hard 16d1d2014

head is now at 16d1d20 add a line to test

這樣它就回來了。如果我們是關掉電腦後的第二天想要恢復那個版本,還不知道commit id怎麼辦,我們可以用git reflog用來記錄每一次版本操作:

$ git reflog

16d1d20 (head -> master) head@: reset: moving to 16d1d2014

4cf9a97 head@: reset: moving to head^

16d1d20 (head -> master) head@: commit: add a line to test

4cf9a97 head@: commit: add a line

7a04cc4 head@: commit (initial): wrote a readme file

第三行就是我們剛才想要恢復的版本。

小結git reset --hard commit_id回退到已知id的任意版本。

git log列印提交歷史資訊

git reflog檢視歷史版本操作資訊

第二章 第二節 注釋

零 怎麼編寫注釋 編寫注釋的方式有三種 1.以 開頭 2.以三個 開頭和結尾 3.以三個 開頭和結尾 定義乙個字串變數 name 張三 定義乙個函式 defgetname return name defsetname n param n 姓名 return name n defsetage age ...

作業系統第二章第二節

程序控制的基本過程 程序的建立 程序的終止 程序的阻塞與喚醒 程序的掛起和啟用 關於程序的親屬關係 系統中執行的程序並不都是孤立的,有的程序執行後,會呼叫其他程序來執行,這樣就組成了程序間的父子關係。可用 程序圖 描述乙個程序的家族關係,該圖實際就是一種有向樹。程序間的父子關係關係著資源的繼承。建立...

Python入門系列第二章 第二節 注釋

零 怎麼編寫注釋 編寫注釋的方式有三種 開頭 開頭和結尾 開頭和結尾 定義乙個字串變數name 張三 定義乙個函式def getname return namedef setname n param n 姓名 return name ndef setage age param age 年齡 retu...