關於 git reset 命令幾個常用引數的理解

2021-07-12 03:34:17 字數 1824 閱讀 2891

我們在使用git進行版本管理的時候,如果遇到需要回退**的情況,一般會用git reset命令,不過這個命令還有幾個引數,這篇文章就來詳解一下。

先來了解一下 git 大致的工作流程,配合這張圖會比較容易講清楚

首先,想象一下,我正在寫著我的**,這個狀態對應圖中的 working diretory,

這個時候,我的**還就是我的,跟 git 半毛錢關係都沒有。(在android studio中對應檔案顏色是紅色)

然後,我把當前編輯的a檔案add到 git 中,這個時候就跟 git 發生了關係,git 接受了我的**,然後把這個檔案存入了自己的暫存區,後面我對這個檔案的更改 ,git 都會知曉。這個狀態對應圖中的 stage/index(在android studio中對應檔案顏色是綠色或者藍色)

我把寫好的a檔案commit到 git ,這就有了一次提交歷史。對應圖中的 history,在 git 中只要commit過的檔案,都有各種方式可以恢復,基本來說,就是不會丟了(在android studio中對應檔案顏色是白色)

好的,那麼現在,我發現**寫的不好,需要回退到上一次的提交,我有幾個命令可以選擇。

常見以下三個命令:

git reset --hard

git reset --soft

git reset --mixed

這個命令非常危險,是 git 中少有的幾個會丟失資訊的操作。它會把回退點之前的所有資訊都刪掉,乙個不留,乾乾淨淨。

舉個例子:

現在我把a檔案修改了兩次,到了c狀態 ,並且已提交。

那麼我的分支指標是指向c, 當前檔案編輯的狀態也是在c

(f)

a-b-c

↑master

我輸入了git reset --hard,結果會變成:

(f)

a-b ↑

master

對的,c狀態徹底沒有,再也找不回來。所以,沒事不要用這個命令。

同樣是這個狀態:

(f)

a-b-c

↑master

我輸入了git reset --soft,結果是:

(f)

a-b-c

↑master

檔案狀態與分支的指標都指向上乙個提交,c還是在的,只是沒顯示。

還是這個場景:

(f)

a-b-c

↑master

我輸入了git reset --mixed,結果是:

(f)

a-b-c

↑master

分支指標指向上次提交點,但是檔案狀態還是在當前檔案c,我看到的現象就是c檔案還在,但是沒有add,是紅色的。

可以看出,三個命令中mixed是最好的回退處理方式,其實這也是git reset的預設引數。

Git reset命令的使用

weiweilong 關注 git reset 命令有三個主要選項 git reset soft git reset mixed git reset hard git reset soft 將head引用指向給定提交。索引和工作目錄的內容是不變的,在三個命令中對現有版本庫狀態改動最小。git res...

關於網路的幾個命令

1.nslookup 最簡單的用法就是查詢網域名稱與ip位址的對應。並可以看到本機使用的dns伺服器ip和名字。nslookup 本機使用的dns伺服器ip和名字 nslookup 網域名稱 由網域名稱找ip nslookup ip 由ip找網域名稱 2.ping命令可以帶上 a 引數,這樣,就順便...

c 中的幾個「常」

c 中雖然有不少有效的措施來增加資料的安全性,但有些資料往往是共享的,例如實參與形參,變數與引用,資料及指標等,人們可以在不同的場合通過不同的途徑訪問同乙個資料物件,有時可能會在無意中改變有關資料的狀況,而這是人們不願意看到的。因此既要使資料能在一定範圍內共享,又要保證它不被任意修改,這時可以把有關...