iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
1

DAY4 Git 版本控制

上回我們講到如何commit,以及觀看git log
這次來講講如何回到過去吧

看看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 checkout這個指令,他也可以跳回你要的版本。
但是跟git reset 有什麼區別呢?

讓我們測試看看吧

git checkout 1b7f134
  • 結果:

你看出來了嗎?
沒錯,他只有"HEAD"標籤回到上個版本,但"master"不見了。
git checkout只是回去看看這個版本而已,若內容是你要的,就下git reset,回到那個版本吧。(記得先git checkout master回到原本的地方,再下git reset喔)

git reset --hard 是不是先前的版本已經刪除回不去了呢?

不用擔心,雖然你在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之後

    1. 先下git checkout master將HEAD回到master,別擔心,你剛剛的commit沒有不見
    2. 再來下git merge branch1將master合併branch1分支,git會自動合併兩個版本,然後要你commit一次,但是合併很有可能會遇到衝突,因為有些檔案內容可能不同,無法自動合併
    3. 合併若是遇到衝突,不用緊張,使用git status會看到有檔案合併後修改了,該檔案已經回到工作目錄
    4. 這時開啟編輯器編輯此檔案,你會看到檔案內有兩個分支的內容象這樣子

      請將不要的內容刪除
    5. 編輯完後重新commit一次,就完成合併了。

我簡單講了兩個分支的merge的步驟

但是我覺得若你是git新手,我建議先使用master一條線就好,要回到之前的版本,使用git reset --hard就好。


若你是參考本文章學git,建議可以使用linux指令建個測試用的資料夾玩玩看,練習版本切換,之後用在專案上會很方便的。
若是看了本文章之後,將來有幫助你救回寶貴的資料那就太好了。
git的基本介紹就先到這邊,用在本地開發應該夠了。
明天我們就開始進入laravel吧。


上一篇
DAY3 使用Git
下一篇
Day5 laravel new your project 使用laravel建立你的專案吧!
系列文
後端新手 使用laravel 從零開始 到開出api30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言