版本回退
版本回退是指將版本庫從當前版本回退到其他的版本。
語法:git reset --hard 版本號
有時,我們需要將 git 版本庫回退(還原)到以前的某個版本,可以使用 git reset 命令。
在 git 中,head 指標指向的是當前版本,也就是最新的 commit id,上乙個版本是 head^,上上乙個版本就是 head^^,上50個版本可以寫成 head~50。
git reset --hard head^
這時,我們再來使用 git log 命令檢視版本庫被修改的日誌。卻發現,看不到被回退的版本之後的歷史記錄了。如果,想再回到最新的版本,怎麼辦?
只要剛剛的命令列視窗沒有關掉,你就可以順著往上面找,直到發現最新的版本號(如4b2a0c88a2d03675694013ac6a2bd6f55c830cdc),於是,就可以使用下面的命令還原到指定的版本:
git reset --hard 4b2a0c8
版本號(commit id)沒必要寫全,一般寫前七位就夠了,git會自動去匹配。
但是,假如你回退到了某個版本後,把電腦關了。第二天又後悔了,想要恢復到最新版本。
這時,可以使用命令 git reflog 來檢視你的每一次操作日誌,該命令可以輸出對應的版本號的操作記錄。這樣,我們就可以恢復到任意版本了。
git reset 的選項
git reset 有很多可用的選項。可以通過幫助命令來檢視。
git reset -h
其中,最常用的三個選項是:
–mixed: reset head and index。表示重置 head 指標和 index 暫存區,但保持工作區不變。它是預設選項。
–soft: reset only head。表示僅僅重置 head 指標,即只改變 head 的指向,但保持工作區和暫存區不變。
–hard: reset head, index and working tree。表示重置 head 指標、index 暫存區和工作區。這個才是完整的版本回退。
檢視版本庫的狀態
git status
git status 命令非常有用。它可以檢視版本庫的當前狀態,還可以看到相關操作的提示資訊。
檢視修改
如果你修改了工作區中的某些檔案,想要檢視具體更改了什麼內容,可以使用 git diff 命令。
git diff .
git diff filename
檢視工作區和版本庫的區別
如果你只是修改了工作區,還沒有 git add 到暫存區,想要檢視工作區和版本庫的區別。
git diff
上述命令只能檢視到工作區中已經存在的檔案的修改,如果是新建立的檔案,它追蹤不到。如果修改和新檔案已經 git add 到了暫存區,就需要使用下面的命令來檢視。
檢視暫存區和版本庫的區別
如果你修改了工作區,已經 git add 到了暫存區,想要檢視暫存區和版本庫的區別。
git diff --cached
檢視兩個版本之間的區別
如果你修改了工作區,已經 git add 到了暫存區,並且 git commit 到了版本庫。這樣 head 指標就指向了最新的版本。想要比較兩個版本之間的區別。
語法: git diff 版本號1 版本號2
git diff 4129523 0a7d9af
在這個例子中,412952 是上乙個版本的版本號,0a7d9af 是當前的版本號(最新版本號)。只取前 7 位就夠了。
git diff 4129523 head
git diff 4129523
檢視本地的兩個分支的區別
語法格式為:git diff branch1 branch2
git diff develop master
檢視本地分支和遠端分支的區別
git diff develop origin/master
檢視版本庫的歷史記錄
如果你想檢視版本庫提交的歷史記錄 ,可以使用 git log 命令。
git log
git log --pretty=oneline
git log -5
git log -5 --pretty=oneline
git log 命令缺省會進入日誌檢視模式,可按 q 退出檢視模式。
git log 命令會顯示從最近到最遠的提交日誌,每一行的前面的一大串字元就是 commit id(版本號),它和 svn 的版本號不一樣,git 的版本號不是遞增的數字,而是乙個 sha1 加密計算出來的乙個非常大的數字,用十六進製制表示。
場景分析
場景一假如你只是修改了工作區,還沒有 git add 到暫存區。可以使用下面的命令撤銷工作區中的修改。
git checkout .
場景二假如你修改了工作區,並把工作區中的修改 git add 到了暫存區。
如果你想撤銷工作區和暫存區中的修改。
git reset --hard head
git reset --hard
如果你僅僅只是想要撤銷暫存區中的修改。
git reset --mixed
git reset
場景三假如你修改了工作區,並把工作區中的修改 git add 到了暫存區,然後又 git commit 提交到了版本庫。
如果你想回退到上乙個版本,可以使用下面的命令。
git reset --hard head^
檢視當前的版本號,可以使用。
git rev-parse head
需要注意的是,在 windows 的 cmd 中, ^ 代表換行,即命令沒輸完,在下一行繼續輸命令。它相當於 linux 中的 \ 。
因此,在 cmd 中回退到上乙個版本的寫法,就略有不同。
具體的解決方法有:
git reset --hard 「head^」
git reset --hard head^^
git reset --hard head~
git reset --hard head~1
改用 powershell 或 git bash 終端
還有乙個需要注意的問題是,通常我們所說的版本回退是指完整的版本回退。
如果你回退版本時,採用的是 『 git reset --mixed 版本號 』,–mixed 其實本來就是預設選項。那麼,你只是更改了 head 的指向和回退了暫存區,而並沒有回退工作區。如果想要繼續把工作區也回退,你還需執行下面的命令
git checkout .
這樣,才算完整的版本回退。
完整的版本回退,包含三個要素:
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...