上一次有提到說,修改 commit 的方式有以下幾種:
已經介紹完 rebase,接下來就來講解 reset 吧!
當我們第一眼看到 reset 會直覺反應是重新設定的意思,但其實在 git 中的 reset 反而是 go to、become 的意思,為什麼會這樣講呢?我們透過實際例子來看看
如果你想修改的是「上一次」的紀錄,那麼你可以使用以下兩種指令
git reset master^
或
git reset HEAD^
在 master
跟 head
後面接著的 ^
代表的意思就是「上一次」
倘若你想修改的是「非上一次」的紀錄,必須先使用 git log --oneline
查詢 SHA-1 碼,然後使用的指令如下:
git reset <SHA-1>
那為什麼會說在 git 裡的 reset 是 go to、become 的意思呢?
因為上面的指令如果翻成白話文的話是「請幫我移動到我指定的位置」,原本那些 commit 都還是在,並沒有消失不見,只是暫時隱藏起來而已,隨時都可以再找回來。
git reset 也可以搭配參數使用,而他有三種比較常見的模式:--mixed
、--soft
以及 --hard
mixed 是預設的參數,如果沒有輸入的話就是以此模式進行,這個模式會把暫存區的檔案丟掉,但不會動到工作目錄的檔案,也就是說 Commit 拆出來的檔案會留在工作目錄,但不會留在暫存區。
soft 模式則是不管是暫存區還是工作目錄的檔案都不會被刪掉,只有 HEAD 的移動而已。也因此,Commit 拆出來的檔案會直接放在暫存區。
hard 模式的話,就是暫存區還是工作目錄的檔案都會被刪掉,但如果不小心使用 hard 模式又後悔了怎麼辦!沒關係,還是有辦法救回來,詳情請見這篇文章。