2017年3月4日 星期六

[Git]記錄點控制管理

假設情境:
今天假設我們處於一種三心兩意的狀態.....想要無痛回到以前版本,
畢竟下過了git commit -m ""指令已經成為紀錄點了(commit下之前,最好還是仔細思考比較好)
理所當然的想到Git指令:git reset --hard HEAD^1(or更久以前的版本)
但是!又想回到剛剛較新的版本的時候又該如何是好呢??而且還想救回剛剛被自己刪掉的檔案
ps.因為筆者準備把之前的文章搬過來,但又怕不完整,所以還是整個流程跑下來比較實際,之後後續再作補充

流程開始
這邊我們用GIT SHELL 這個軟體操作(方便看追蹤狀態)
一開始一定先創建資料夾讓這個資料夾內所有資料都能被Git追蹤到
指令:
mkdir commit_demo #創建commit_demo資料夾
cd commit_demo #進去commit_demo
git init #使當前資料夾能使用git指令
echo "message" >test.txt #建立資料夾並在裡面填寫內容
git add . 如圖
擷取_2017_03_04_19_54_53_370.png
git commit -m "message" # 記錄點 message 盡量以英文為主 否則不支援Unicode
像是這樣如圖
擷取_2017_03_04_19_58_07_923.png

解決辦法:git commit --amend -m "message" #修改上次記錄點的紀錄文字
這邊我把字換掉 換成num1
我們去確認狀況是否修改成功
gitk --all
如圖
擷取_2017_03_04_19_59_31_216.png
接下來 為了讓大家清楚看到記錄點的控制 都會用gitk --all 讓大家看清楚版本控制
我們先把版本增加為3個 分別為num1 num2 num3
txt檔案 分別為 test.txt test2.txt test3.txt如下圖
擷取_2017_03_04_20_05_16_70.png
擷取_2017_03_04_20_05_47_747.png

之後理所當然的 想回到num2版本
git reset --hard HEAD^1 如圖
擷取_2017_03_04_20_08_46_195.png
結果發現 我還想要 存在於num3記錄點內的test3.txt 或是我想要回到num3記錄點
但記錄點已經不見了!!!
不管我們用git log 查還是 gitk --all都已經不存在了如圖
擷取_2017_03_04_20_11_47_511.png
這時候該怎麼辦呢?

這時候我們用一個指令 git reflog
擷取_2017_03_04_20_13_15_227.png
有沒有看到熟悉的num3? 對沒錯 其實git 還是很佛心的幫你記錄下來了(只要.git 還在一切搞定)
那我們要怎麼回去呢?
於是接下來我們看到 num3 HEAD前面有串英文+數字(這裡是純數字 沒差) 那個就是所謂的記錄點編碼(這邊礙於不是整篇重點無法詳細介紹)

於是我們輸入
git reset 看到的編碼
擷取_2017_03_04_20_22_28_995.png
好,我們回到了num3的進度了.....
但 請特別注意 若是刪除掉的檔案 其實光是這樣還是無法救回
系統顯示 Unstaged 那個被刪除的檔案
用dir 看了一下資料夾內容....確定 test3.txt真的被刪掉了
只有還存在的檔案 修改能回復
但要救回檔案還是可以的...
git checkout master test3.txt #回復 test3.txt

擷取_2017_03_04_20_24_33_196.png

這樣下來,我們看到了 test3.txt終於回來了((灑花
我們去gitk --all看看狀況如圖

本篇到此結束....
筆者只是GIT初學者而已,若有更好的方法還請各位大大指教




沒有留言:

張貼留言