【Git】撤銷修改操作

上一篇博客講到了 Git 中 如何查看版本改動 ,瞭解瞭如何檢查不同情況下的修改操作後,本篇博客我們來講述不同情況下的撤銷操作。

撤銷操作分爲以下4種情況,針對這4種情況,接下來我按順序逐個講解。

情況一:已修改,未添加到暫存區

首先,我在本地建了一個 TestFile.txt 的空文本,在第一行寫入 “測試不同情況下的撤銷操作” 的內容,然後推送到遠端,當做我們的初始版本。

接着把內容改爲“驗證不同情況下的撤銷操作”,注意此時文件已經是修改狀態,只不過還沒有添加到暫存區,即還是在工作區,此時如果想改回未修改前的狀態,就需要使用指令

git checkout -- FileName

如下圖所示
在這裏插入圖片描述
如果想要撤銷修改的文件非常多怎麼辦呢?你可以通過下面這個指令一鍵把所有改動撤銷

git checkout .

git add . 的反義詞就是 git checkout .
在工作區做完修改之後,
如果想把所有的改動文件都添加到暫存區,就執行 git add . 指令,
如果想把添加到暫存區的文件撤銷回工作區,就執行 git checkout .

情況二:已添加到暫存區,未提交到版本庫/font>

不巧的是,你已經將改動文件通過 git add 指令添加到了暫存區,此時才意識都了錯誤,但又想要撤銷回工作區,怎麼辦呢?
你需要通過先後兩個指令來完成,如下代碼所示

git reset
git checkout --FileName

說明:
git reset 指令只是把修改撤銷回到 git add 之前的狀態,即在工作區已經改動過文件的狀態,也就是說文件本身還處於 已修改未添加到暫存區 的狀態,如果想撤銷到沒改動文件前的狀態,就回到了上面情況一的問題,所以還需要執行 git checkout – FileName 指令。

親測代碼如下圖所示
在這裏插入圖片描述
此時我用 git diff 指令查看修改,可以看到修改內容,反證了此時我們處於工作區(如果此時處於暫存區,使用該指令是看不到任何輸出結果的,前面博客已說過)

並且文件已被修改,此時使用 git checkout --FileName 指令撤銷回未修改前的文件狀態,再用 git diff 查看,沒輸出結果就證明文件沒做任何修改了。
在這裏插入圖片描述

情況三:已提交到版本庫,未推送到遠端庫/font>

這次你把改動文件不僅添加(git add)到了暫存區,還提交(git commit)到了自己本地版本庫,此時你才意識到錯誤已經發生,怎麼挽回呢?不要慌,有辦法

你可以通過下面指令來撤銷你提交至版本庫的修改

git reset --hard origin/master

前面說過,origin/master 代表遠程倉庫,既然自己的版本庫已被污染,那就從遠端倉庫把文件拉取回來吧。

親測代碼如下所示
在這裏插入圖片描述

情況四:已推送到遠端庫/font>

此時你已經使用 git push 指令把更改的文件推送到了遠端倉庫,此時你的本地版本庫和遠程倉庫是一樣的,如果想要恢復的話,只需要先恢復本地倉庫,再強制 push 到遠端庫就好了。

後續補充:
當然,你也可以通過前面講到的版本回退的指令 git reset --hard 指令回到未修改前的版本,不過這種方法比較暴力,如果只想撤銷指定文件的話還是用 git checkout 比較合適。

至此,撤銷修改操作介紹完畢,如博文有錯誤,希望大家積極指出,讓我們共同進步,共同成長。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章