git reset 取消 commit 詳細教學

在使用 git 時,有時候會需要取消 commit 的內容,這篇來記錄一下

git reset 指令

取消上一個 commit

    
git reset HEAD^
    


註:如果在 windows 的 cmd 上執行該指令,會被詢問「More?」,這是因為「^」被當作換行符號,所以可以使用「HEAD~」代替,或是使用引號包起來,範例:「"HEAD^"」

取消前面 3 個 commit

    
git reset HEAD~3
    

取消指定的 commit

    
git reset 42f63de
    

保留檔案和紀錄在暫存區

就是「僅刪除 commit 這個動作」,使用 git add 增加檔案到暫存區的這個動作沒有被一起刪除,刪除 commit 後在暫存區中看到內容和 commit 前看到的內容是一樣的
    
git reset --soft HEAD~
    


從上圖可以看出暫存區的內容還在

保留檔案並清空暫存區

預設的 git reset 指令其實包含了「--mixed」參數,使用 git status 查看時會發現暫存區被清空了,需要手動使用 git add 指令將變更的檔案重新加入到暫存區
    
git reset HEAD~
    


從上圖可以看出暫存區沒有內容,但是有未追蹤變更的檔案

刪除檔案並清空暫存區

如果想要在刪掉 commit 的同時也將變更的紀錄和檔案也一起刪掉時,就是使用「--hard」,不過因為所有變更的內容都被刪掉了,所以應該會很少需要使用到這種模式
    
git reset --hard HEAD~
    


從上圖可以看出暫存區沒有內容,並且也沒有有變更的檔案

留言