Git使用 「時光穿越」

2021-10-10 06:10:01 字數 2660 閱讀 3670

在git使用——檔案修改與狀態檢視一文中介紹了修改檔案的方法。

目錄

一.再次修改檔案

二.git時光機

再次修改readme.txt檔案,然後提交

# 修改檔案內容如下

git is free.

git is a distributed version control system.

git is free software distributed under the gpl.

# 提交檔案

$ git add readme.txt

# 提交結果

1 file changed, 2 insertions(+), 1 deletion(-)

不斷對檔案進行修改,然後不斷提交到版本庫里。每commit一次就會有乙份存檔,如果你不小心刪除或改動了檔案中的重要內容,你可以選擇從最近乙個存檔恢復。

人的精力是有限的,不可能把每次修改的內容都記住,而在git中使用命令可以幫助我們查詢歷史記錄。

# 顯示從最近到最遠的提交日誌

$ git log

# 結果

author: username date: time

commit 36a95ace80a876fdfbd8c1e6690561ec4605a6d3

author: username date: time

add distributed

commit e3c89a6b8f3aca4597ce0acfafeb6c12bc9b016a

author: username date: time

first readme

# 精簡輸出

$ git log --pretty=oneline

# 結果

36a95ace80a876fdfbd8c1e6690561ec4605a6d3 add distributed

e3c89a6b8f3aca4597ce0acfafeb6c12bc9b016a first readme

# 結果分析

結果中一長串字元是commit id(版本號),是乙個sha1計算出來的乙個非常大的數字,用十六進製制表示。

為什麼commit id需要用這麼一大串數字表示呢?因為git是分布式的版本控制系統,為了避免多人在同乙個版本庫里工作產生的衝突。

每提交乙個新版本,git就會把它們自動串成一條時間線。如果使用視覺化工具檢視git歷史,就可以更清楚地看到提交歷史的時間線

現在想把檔案回退到add distributed版本,應該如何操作?

首先明確當前是哪個版本,在git中用head表示當前版本,上乙個版本就是head^,上上個版本就是head^^。如果版本太多怎麼辦?比如回退到前50個版本應該寫成head~50。

$ git reset --hard head^

# 結果

head is now at 36a95ac add distributed

檢視readme.txt

# 檢視readme.txt檔案內容

$ cat readme.txt

# readme.txt檔案內容

git is free.

git is a distributed version control system.

這時再次檢視版本庫狀態

# 檢視日誌

$ git log

# 結果

author: username date: time

add distributed

commit e3c89a6b8f3aca4597ce0acfafeb6c12bc9b016a

author: username date: time

first readme

# 版本恢復

# 版本號沒必要寫全,前幾位即可。git會自動尋找。也不能只寫前一兩位,git可能會找到多個版本號,無法確定是哪乙個。

$ git reset --hard 2ee2

# 恢復結果

# 再次檢視檔案內容

$ cat readme.txt

# 檔案內容

git is free.

git is a distributed version control system.

git is free software distributed under the gpl.

現在假設這樣乙個場景:你完成了工作並關閉了電腦。但是第二天你又想恢復到最新的版本,你已經忘記了commit id,現在怎麼辦?

git考慮到了這種情況

# 檢視命令歷史

$ git reflog

# 結果

2ee22b0 (head -> master) head@: reset: moving to 2ee2

36a95ac head@: reset: moving to head^

36a95ac head@: commit: add distributed

e3c89a6 head@: commit (initial): first readme

好了,現在你知道了版本號,問題被完美解決了。

穿越時光網的愛戀

東漢末年分三國,在這懸而未分之時的東漢,有乙個著名的政治家,姓孫名敬,字文寶。我們的文寶兄自幼酷愛學習,每天從早到晚的讀書,廢寢忘食。奈何人不是鐵打的,文寶兄再沉迷學習也抵擋不住身體的疲倦,在他撓頭思索如何將十二個時辰的點點滴滴都用於讀書時,手中的一頭秀髮給了他乙個激靈。文寶找來一根繩子,將自己的頭...

Git使用(時常新增)

tab鍵是提示鍵 建立本地倉庫 會在本地建立乙個.git的隱藏資料夾,裡面是git所需要的檔案 git init cd 進資料夾 cd e 進盤 檢視倉庫檔案是否變更 git status 顯示當前分支的版本歷史 git log 提交檔案到暫存區 git add 檔名1 檔名2 提交指定檔案,也可以...

Git 時光穿梭

1.git status 命令可以讓我們掌握倉庫當前狀態 2.git diff 檔名 顧名思義 檢視difference,可以得到檔案更改的詳細資訊 3.head指向的版本是當前版本,git 允許我們在版本之間穿梭,使用命令 git reset hard commit id 穿梭前可以檢視提交歷史,...