Git用於撤銷的操作主要有以下幾個:
- $ git reset HEAD <file>... # 撤銷暫存的文件
- $ git reset --hard HEAD # 撤銷工作目錄中所有未提交文件的修改內容
- $ git checkout -- <file>... # 撤銷指定未提交文件的修改內容
- $ git reset [--soft | --mixed | --hard] [<commitID>] # 回退代碼至某次提交
1. 撤銷暫存的文件
對於已經暫存的文件,可以 $ git reset HEAD <file>... 命令來取消暫存。例如,文件file2.md已暫存:
運行 $ git reset HEAD <file>... 命令后,當前文件的狀態為:
2. 撤銷工作目錄中所有未提交文件的修改內容
不加選項地調用 git reset 命令並不危險,因為它只會修改暫存區域,並不會被修改工作目錄內的文件。但是,如果在調用的時候在調用時加上 --hard 選項,會撤銷工作目錄中所有未提交文件的修改內容。例如,當前文件的狀態為:
運行 $ git reset --hard HEAD 命令后文件的狀態為:
3. 撤銷指定未提交文件的修改內容
如果你並不想保留對某個文件的修改,需要將其將它還原成上次提交時的樣子(或者剛克隆完的樣子,或者剛把它放入工作目錄時的樣子)。可以使用 git checkout -- <file>... 命令,例如:
注意:git checkout -- [file] 是一個危險的命令,你對那個文件做的任何修改都會消失,除非你確實清楚不想要那個文件的修改內容了,否則不要使用這個命令。
4. 回退代碼至某次提交
命令:$ git reset [--soft | --mixed | --hard] [<commitID>]
--soft:修改本地倉庫里面的數據為commitID對應快照的數據,所有更改過的文件都將變為“待提交的修改”。
--mixed:修改本地倉庫和暫存區里面的數據為commitID對應快照里的數據,更改后的文件將被保留,但沒有標記為提交(是git reset的默認操作)。
--hard:修改本地倉庫、暫存區和工作區里面的數據為commitID對應快照的內數據,從<commitID>開始對工作樹中跟蹤的文件所做的任何更改都將被丟棄。