在使用 git 時,有時候會需要取消 commit 的內容,這篇來記錄一下
註:如果在 windows 的 cmd 上執行該指令,會被詢問「More?」,這是因為「^」被當作換行符號,所以可以使用「HEAD~」代替,或是使用引號包起來,範例:「"HEAD^"」
從上圖可以看出暫存區的內容還在
從上圖可以看出暫存區沒有內容,但是有未追蹤變更的檔案
從上圖可以看出暫存區沒有內容,並且也沒有有變更的檔案
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~
從上圖可以看出暫存區沒有內容,並且也沒有有變更的檔案
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com