Git reset 中 命令詳解
A——working (工作區) : a.txt 有修改
B------index (暫存區) :b.txt 有修改
C -----HEAD
D -----HEAD^
git reset --soft 完全保留 工作區和暫存區,僅改變 HEAD的指向的位置(所有rese都會執行這個操作)。
git reset --mixed 完全保留工作區,徹底清除暫存區。
git reset --hard 徹底清除工作區和暫存區。
--merge --keep 這兩個選項的效果是保留修改的差異部分。 如果回退的內容與保留的修改存在衝突(有相同檔案)則命令會失敗.。
git reset --merge 保留 工作區和index之間的差異。
git reset --keep 保留工作區和HEAD之間的差異。
使用場景1: 用於撤銷 git pull 產生的修改.
第一種情況:
git reset --merge HEAD
工作區中保留了a.txt的修改,將丟棄b.txt修改,; index 將復原成HEAD(C狀態)
如果暫存區中沒有修改,那這個命令不會產生任何修改.
git reset --keep HEAD
保留了a.txt 和 b.txt的修改, index將全部復原成HEAD
第二種情況:
git reset --merge HEAD^
如果 HEAD vs HEAD^ 有a.txt, 命令將失敗
工作區中保留了a.txt的修改,其它內容恢復到 D狀態; index 將復原成HEAD^(D狀態)
git reset --keep HEAD^
如果 HEAD vs HEAD^ 有a.txt或b.txt修改, 命令將失敗 ;
其它情況: 工作區中保留了a.txt和b.txt的修改,其它內容恢復到 D狀態; index 將復原成HEAD^(D狀態)