檢視提交歷史
git log
git log命令顯示從最近到最遠的提交日誌,我們可以看到3次提交,最近的一次是002,上一次是001,最早的一次是000
如果嫌輸出資訊太多,看得眼花繚亂的,可以試試加上–pretty=oneline引數:
每提交乙個新版本,實際上git就會把它們自動串成一條時間線。如果使用視覺化工具檢視git歷史,就可以更清楚地看到提交歷史的時間線:
好了,現在我們啟動時光穿梭機,準備把index回退到上乙個版本,也就是001的那個版本,怎麼做呢?
首先,git必須知道當前版本是哪個版本,在git中,用head表示當前版本,也就是最新的提交6f78fa8a…(注意我的提交id和你的肯定不一樣),上乙個版本就是head^ ,上上乙個版本就是head^^ ,當然往上100個版本寫100個 ^比較容易數不過來,所以寫成head~100。
$ git reset --hard head^
head is now at d443708 001
看看index.html的內容是不是版本001:
$ cat index.html還可以繼續回退到上乙個版本000,不過且慢,然我們用git log再看看現在版本庫的狀態:
最新的那個版本002已經看不到了!好比你從21世紀坐時光穿梭機來到了19世紀,想再回去已經回不去了,腫麼辦?
辦法其實還是有的,只要上面的命令列視窗還沒有被關掉,你就可以順著往上找啊找啊,找到那個002的commit id是6f78fa8a…,於是就可以指定回到未來的某個版本:
$ git reset --hard 6f78f版本號沒必要寫全,前幾位就可以了,git會自動去找。當然也不能只寫前一兩位,因為git可能會找到多個版本號,就無法確定是哪乙個了。head is now at 6f78fa8 002
再去看看index.html的內容已經成功回來了
git的版本回退速度非常快,因為git在內部有個指向當前版本的head指標,當你回退版本的時候,git僅僅是把head從指向002:
┌────┐
│head│
└────┘
│└──> ○ 002
│○ 001
│○ 000
改為指向001:
┌────┐
│head│
└────┘
││ ○ 002
│ │
└──> ○ 001
│○ 000
然後順便把工作區的檔案更新了。所以你讓head指向哪個版本號,你就把當前版本定位在哪。
現在,你回退到了某個版本,關掉了電腦,第二天早上就後悔了,想恢復到新版本怎麼辦?找不到新版本的commit id怎麼辦?
在git中,總是有後悔藥可以吃的。當你用$ git reset --hard head^回退到add 001版本時,再想恢復到002,就必須找到002的commit id。git提供了乙個命令git reflog用來記錄你的每一次命令:
$ git reflog終於舒了口氣,從輸出可知,002的commit id是6f78fa8,現在,你又可以乘坐時光機回到未來了。6f78fa8 (head -> master, origin/master, origin/head) head@: reset: moving to 6f78f
d443708 head@: reset: moving to head^
6f78fa8 (head -> master, origin/master, origin/head) head@: commit: 002
d443708 head@: reset: moving to d44370819
eec1380 head@: reset: moving to eec1380
eec1380 head@: reset: moving to head^
d443708 head@: commit: 001
eec1380 head@: commit: 000
b310d1f head@: clone: from
git版本控制
1.git 是乙個開源的分布式版本控制系統,可以有效 高速的處理從很小到非常大的專案版本 管理。2.git配置管理 一般,有乙個 集中庫,包含4個分支 qa才能merge production 發布生產,出現生產問題,轉hotfix 研發經理 hotfix 解決緊急生產問題,測試後轉producti...
版本控制 Git
git 是目前世界上最先進的開源的分布式版本控制系統 沒有之一 用於敏捷高效地處理任何或小或大的專案。git 是 linus torvalds 為了幫助管理 linux核心開發而開發的乙個開放原始碼的版本控制軟體。git 與常用的版本控制工具 cvs,subversion 等不同,它採用了分布式版本...
GIT版本控制
不同情況下,實現版本回退 1.對於修改內容後,未add,未commit 可以利用git checkout 檔名 2.對於修改內容後,add,未commit get reset head 檔名 git checkout 檔名 3.對於修改內容後,add,commit 可以回到任何乙個版本 root g...