Git 學習手冊#6 撤銷提交:Git Reset for Rollback

技術文章, 程式應用

今天我們來學習 Rollback,當我們在使用 Git Commit 指令的時候,有可能「發現一些錯誤」或「後悔了」,想要撤回,就可以使用 Git Reset 這一個指令,但這一個指令很多人常常搞不清楚參數 hard / soft / mixed 的差異,以下,我們一樣透過實作練習的方式來學習這三個參數的差異。

 

 

■ git reset ( hard / soft )

 

如果我們 Commit 之後,我們可以透過 git log 去查詢 Commit 記錄,其中最新的那一筆會出現〝 HEAD -> master〞的字眼,如下圖所示:

 

 

HEAD -> master 是當前最新的一個 Commit

假設我們又新增 commit 了 demo.txt ,如下圖所示:

 

雖然我們可以透過 git diff 指令去看我們變更了哪些內容,一行一行去刪,但這個不太可行,所以可以透過 git reset –hard HEAD~ 指令去進行撤銷提交。

 

 

 

‌這時候我們再使用 git log 去查看,發現 demo commit 已經不見了,而檔案也已經還原回來

 

 

剛我們用的指令是 git reset –hard HEAD~ ,如果我們改用 soft 參數: git reset –soft HEAD~ ,那麼撤消一樣會成立,但檔案〝不會被還原〞,回到提交前的狀態 ( uncommit )。

 

如果我們使用 git reset HEAD ~ ,但不加參數,那麼那麼撤消一樣會成立,但檔案〝不會被還原〞,回到添加前的狀態 ( unadd )。

 

 

若我們使用了 git reset HEAD ~,我們就必須再重新添加 ( gIt add ) 一次,但如果不想重新寫註解,可以使用 git commit -c ORIG_HEAD 指令,則會發現之前的 Commit 還在。

 

 

■ git reset 參數說明

 

  • git reset –mixed
    • 不加參數時,默認為 –mixed
    • 撤回之後,還仍供二次修改的機會。[推薦]
    • 狀態:撒回,但「文件不改變」,需重新 add 文件。

 

  • git reset –hard
    • 撤回之後,文件也直接回到最原始的狀態,較不推薦。
    • 狀態:撒回且「文件重當初原始狀態」。

 

  • git reset –soft
    • 和 mixed 和 hard 處於中間狀態,撤回之後,自動 add 文件
    • 狀態:撒回,但「文件不改變」,需重新 commit 文件。 ( 已 add 完成 )

 

 

■ Git Rollback 

 

 

 

以上圖為例,我們希望退回 Rollback 的第一個,我們可以透過下面的方式進行:

 

// 透過〝哈希值〞直接指定哪一個

 

 

// 透過〝相對位置〞指定 ( 往前退 2 個位置 ),跟上述指令相同

 

 

// 透過〝相對位置〞指定 ( 往前退 2 個位置 ),跟上述指令相同

 

 

 

Gimmy
作者: Gimmy
積極的人在每一次憂患中都看到一個機會 而消極的人則在每個機會都看到某種憂患

發表迴響