reset在提交層面,是將HEAD設定到指定的提交,通常用來捨棄最新的幾個提交。在文件層面,是將指定的提交中的該文件保存到暫存區,工作區中的文件不變。

reset有三個常用的參數:--mixed、--soft和--hard。

在提交層面,--mixed是默認值,影響暫存區,不影響工作區;--soft將HEAD版本保存到暫存區,並將HEAD設定到指定的提交,用來合併提交歷史;--hard既影響暫存區,也影響工作區。

在文件層面,--soft和--hard均會報錯,不支持這兩個選項。

在提交層面,執行過reset後如果需要撤銷,使用reflog命令查看之前HEAD的hash,通過reset --hard恢復到該版本。

checkout在提交層面,用來切換分支或檢出到指定的提交。對於後者,如果增加了新的提交,在切換到其它分支後,再切換回來時,這些提交將會丟失,如果希望保存這些提交,在切換到其它分支前,創建一個新的分支。

revert用來通過創建一個新的提交來回滾一個提交,因此,和reset不同,並不會改變提交的歷史。

對於回滾一次提交的場景,revert比reset安全,所以revert適用於公共分支,reset適用於私有分支。