上回我們講到如何commit,以及觀看git log
這次來講講如何回到過去吧
這是昨天我們介紹過的 git log
的內容,能看到6c35a0a80736dacff90a819e44bfc3f1b1260955 這串亂碼就是版本號
commit 成功後會隨機產生的東西
其實可以用更簡潔的
git log --oneline
6c35a0a
就是版本號
知道了版本號,那如何回到那邊呢?
git reset {版本} --hard
git reset +版本號 可以回到指定的版本
例如:git reset 1b7f134 --hard
可以回到 "git init" 的那個commit
或是你可以下git reset HEAD^ --hard
代表回到HEAD的上個版本。
加上 ^等於上一個,^^就是上上個,以此類推
--hard
建議配合這個參數使用,若是沒有加上--hard
當然也會回到那個版本,但是你的檔案內容不會改變,然後回到工作目錄,
結果:
我們上一次有稍微提及git checkout
這個指令,他也可以跳回你要的版本。
但是跟git reset
有什麼區別呢?
讓我們測試看看吧
git checkout 1b7f134
你看出來了嗎?
沒錯,他只有"HEAD"標籤回到上個版本,但"master"不見了。git checkout
只是回去看看這個版本而已,若內容是你要的,就下git reset
,回到那個版本吧。(記得先git checkout master
回到原本的地方,再下git reset
喔)
不用擔心,雖然你在git log
中看不到,但是那個commit還是存在的。
只要你的.git資料夾還在,都還有可能救的回來。
下指令
git reflog
結果:
你可以看到版本切換的過程
也就是之前的版本號都還找的到
找到你要的版本後,一樣使用git reset
回到該版本即可
只要是你之前,commit過的,基本上都可以回到那個版本。
斷頭 detached HEAD
指的是沒有任何標籤指向這個版本,只有HEAD前往那邊。
例如:
通常在使用git checkout
的時候會出現這種狀況,如果是git reset
會連同 master一起回到那邊,便沒有這種問題。
怎麼解決這種情況?
斷頭其實沒什麼,只是你在沒有標籤的地方而已
如果只是看看,沒有要做修改,直接git checkout master
回到master標籤就行
若是你要修改,建議開啟新的分支
可以按照他給的信息 使用
git checkout -b {分支名稱} {版本}
-b
這個參數代表checkout的同時創立新的分支,就不會出現斷頭的現象了。
不知不覺講到分支的部份了,總之,若是想要回到master的懷抱
流程式這樣的。
假設我回到上個版本然後創立分支branch1,git checkout -b branch1 HEAD^
然後做修改,commit之後
git checkout master
將HEAD回到master,別擔心,你剛剛的commit沒有不見git merge branch1
將master合併branch1分支,git會自動合併兩個版本,然後要你commit一次,但是合併很有可能會遇到衝突,因為有些檔案內容可能不同,無法自動合併git status
會看到有檔案合併後修改了,該檔案已經回到工作目錄
我簡單講了兩個分支的merge的步驟
但是我覺得若你是git新手,我建議先使用master一條線就好,要回到之前的版本,使用git reset --hard
就好。
若你是參考本文章學git,建議可以使用linux指令建個測試用的資料夾玩玩看,練習版本切換,之後用在專案上會很方便的。
若是看了本文章之後,將來有幫助你救回寶貴的資料那就太好了。
git的基本介紹就先到這邊,用在本地開發應該夠了。
明天我們就開始進入laravel吧。