iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0

reset 回推

使用Git的一大好處就是,當我的程式在改動的過程中發生了難以修復的錯誤,我們可以透過版本回推來還原。承接上一章節,我們先來建立多個commit。

https://ithelp.ithome.com.tw/upload/images/20210905/20119044keCYd0V2mC.png

輸入git log --gragh如上圖,我們新提交了3個commit,分別是新增修改1、新增修改2、把修改1改成修改3。HEAD->MASTER代表我們MASTER HEAD目前處於最新的"修改1變成修改3"的commit下。

就像是在一篇文章講的,我們在修改、commit有分為三大區塊:工作區、緩衝區、歸檔區。因此我們回推也可以選擇回推不同的程度。下達git reset <不同回推程度> <哈希(前七碼)>即可進行回推。

(哈希可由reflog查看)
git reset --soft <哈希>
# 還原commit (但還是有被add)
# --soft只回原歸檔區

git reset --mixed <哈希>
# 然後查看git log 會發現之前提交的消失了
# 但是程式碼沒有變動(尚未回滾)
# --mixed 是同時對歸檔區與緩衝區做回滾。
# 所以此時modify尚未add

git reset --hard <哈希>
# 還原commit全部,包含程式碼
# --hard還原歸檔區、緩衝區、工作區

soft、mixed、hard分別代表三種不同的回推程度。具體可以看下圖:

https://ithelp.ithome.com.tw/upload/images/20210905/2011904423Bw6SMHEk.png

實際來下達git reset --mixed f81792d (回到修改二),可以看到程式還原到尚未add的狀態。

https://ithelp.ithome.com.tw/upload/images/20210905/20119044UigdBg2ywy.png

revert

git revert <哈希> 同樣的能夠回復程式,但是邏輯不太一樣。來實際git revert f81792d(修改二),這樣就會把修改二的東西都回推掉,類似hard模式。

https://ithelp.ithome.com.tw/upload/images/20210905/20119044nJ4EwvOkGu.png

回朔的邏輯是用一個新的commit來去覆蓋之前的修改

https://ithelp.ithome.com.tw/upload/images/20210905/20119044MjeiiOVhXr.png

revert可以用在修改前輩的程式上,想要回推前輩的東西,但是又不敢亂來。利用revert可以保留前輩之前的commit。不過基本上不常用啦,如果真的要保留,應該要用checkout一個新的分支,不過這個我們就保留到明天說吧。


上一篇
Day 2 : Git 基本操作
下一篇
Day 4 : Git 分支與遠端倉庫
系列文
DevOps的下克上之旅( ° ∀ ° )ノ゙30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言