1. 程式人生 > >Git reset 中 命令詳解

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狀態)