1. 程式人生 > 實用技巧 >【Git】03 撤銷 & 版本回退

【Git】03 撤銷 & 版本回退

回退分為三種情況,每種情況對應了我們檔案的儲存區域

工作區
  |
暫存區
  |
版本區(當前分支)

1、檔案可能存放在工作區,沒有被Git追蹤【紅色標記狀態】

2、檔案可能已經新增到暫存區,沒有被Git提交到版本分支中【綠色狀態】

3、檔案可能已經在版本分支中

1、在工作區的撤銷

首先檢視Git當前狀態:

對我們工作區的檔案進行內容更改:

vim text.txt
A new content insert this file...

再次檢視,很顯然的,更改後的檔案,Git就會標記為未追蹤的檔案

如果要撤銷回到最初的樣子【這是撤銷命令】

git checkout 檔名稱

可以檢視檔案的狀態:

之前新增的內容已經沒有了,Git倉庫狀態顯示未沒有需要提交的,工作樹幹淨

2、在暫存區中的撤銷

現在重新新增內容,並且提交到暫存區中:

檔案新增進暫存區:

對暫存區的檔案撤銷,即把檔案從暫存區拉回到工作區:

git reset HEAD -- 檔名稱

如果撤銷所有暫存區的檔案,可以:

git reset HEAD -- .

或者直接刪除暫存區中的檔案:

git rm --cached 檔名稱

3、在版本分支中的版本回退:

首先把text.txt檔案進行提交,每一次提交代表了一個版本儲存在版本分支中:

每一個版本都具有獨一無二的版本序列號,例如下圖的黃色字串

SVN是一個伺服器集中式的版本控制系統,所有的版本控制統一在SVN中執行

但是Git是一個分散式的版本控制系統,每一個人都有獨立的本地倉庫

版本不會統一在SVN中,每一個開發者的倉庫中的版本號就有可能會一樣,這樣把版本提交到統一的倉庫中就會發生問題

版本衝突,所以為了解決這個問題,Git使用了這種奇特的序列號作為版本號,以防止版本衝突

例如現在最新的版本是第三次提交,而我們希望回退到第二版本或者更早的。。。

首先是回退到上一個版本

這裡一共三個版本,最新版本就是第三次提交

執行這個命令以後可以看到,當前的版本到了第二次提交了

git reset --hard HEAD^

如果要回退臨近的幾個版本,^表示上一個版本,多個^就表示之前的第n個

git reset --hard HEAD^^^^ ...

指令的意思就很明確了,從頭開始回退到第N個版本

但是如果我們希望回退到指定的版本,可以宣告版本號來回退:

git reset --hard 版本號