天天看點

git reset --hard 和 git reset --soft差別

有時候,進行了錯誤的送出,但是還沒有push到遠端分支,想要撤銷本次送出,可以使用git reset –-soft/hard指令。

1、二者差別:

git reset –-soft:回退到某個版本,隻回退了commit的資訊,不會恢複到index file一級。如果還要送出,直接commit即可;

git reset -–hard:徹底回退到某個版本,本地的源碼也會變為上一個版本的内容,撤銷的commit中所包含的更改被沖掉;

2、具體用法如下:

使用git log指令檢視本地的所有送出

git reset --hard 和 git reset --soft差別

現在想要撤銷最後一次送出,即上圖中“OTMS-25838: rollback the modification in OrderDto”這個commit;

(1)git reset --hard使用示例:

git reset --hard 和 git reset --soft差別

使用指令git reset --hard 1c38838ad39b396e271cb10e2146a1d673b4a2b9撤回制定版本号(不包括該送出)之前的所有送出。

注意:上述指令執行成功之後,會徹底傳回到回退前的版本狀态,新發生的變更将會丢失。對于部分發生了變更,但是變更部分的檔案夾存在未送出的檔案可能導緻目錄非空而删除失敗,此時需要自行處置。

(2)git reset –-soft使用示例:

初始狀态,可見目前分支最後一個送出是debug the initialization page

git reset --hard 和 git reset --soft差別

現在要撤銷該commit,但是又不能撤銷該送出包含的更改,使用git reset --soft,執行結果為

git reset --hard 和 git reset --soft差別
git reset --hard 和 git reset --soft差別

可見commit取消了,代碼更改并沒有取消。