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