Git學習筆記(二)修改版本與回退

修改版本與回退

Git修改

我們修改一下readme.txt文件:
在這裏插入圖片描述
然後我們使用git status查看一下倉庫的狀態。

因爲這個readme.txt受Git所管理,所以一旦修改之後,查看git倉庫的狀態就能顯示出來修改記錄(上圖標紅處),然後通過
git diff來查看修改前後的差異:

從上面可以看到修改是多加了個"distributed"。

接着,我們再add一下修改後的readme.txt,然後在commit之前查看一下倉庫的狀態

然後commit,並查看status,發現當前沒有需要提交的修改,且工作目錄是clean的

Git版本回退

我們可以通過git log來查看git 日誌,加上--pretty=oneline可以更加簡潔看到git歷史日誌。
在這裏插入圖片描述
從上圖可以看到,每一條記錄前都有一串數字+字母的號,這個就是commit id

然後我們通過git reset -- hard Head^回退到前一個版本,Head^表示回退個版本,那麼Head^^表示回退個版本,若想回退多個版本(舉例10),就用Head~10
在這裏插入圖片描述
如果我們還想回到最新的版本,因爲 append GPL的commit id爲如下:
在這裏插入圖片描述
所以可指定回到未來的某個版本,版本號沒必要寫全,前幾位(4位)就可以了,Git會自動去找。
在這裏插入圖片描述
當用 git reset --hard HEAD^ 回退到add distributed版本時,再想恢復到append GPL,就必須找到append GPL的commit id。Git提供了一個命令git reflog用來記錄你的每一次命令:
在這裏插入圖片描述

工作區和暫存區

之前我們已經提到了這兩個概念,接下來具體來了解一下這些概念。
這個就是我們的工作區:
在這裏插入圖片描述
而這個文件夾裏有一個.git就是Git的版本庫。
Git的版本庫裏存了很多東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD

我們試圖去.git裏找一下HEAD文件。
在這裏插入圖片描述
打開可以看到:
在這裏插入圖片描述
然後我們打開refs/heads/master
在這裏插入圖片描述
可以發現HEAD就是指向當前的Commit id。

而我們之前的兩個操作addcommit的指示圖如下:
在這裏插入圖片描述

  • add:將文件修改添加到暫存區stage中。
  • commit:把暫存區的所有內容提交到當前分支。

當我們創建Git版本庫時,Git會自動創建了唯一的一個master分支,所以,現在,git commit就是往master分支上提交更改。而需要提交的文件修改都放到暫存區中,再一次性commit這些修改。

我們修改一下readme.txt,並增加一個LICENSE文件,然後查看一下status。

可以發現LICENSE沒有被添加,所以狀態是Untracked。然後我們add一下這兩個文件,再查看一下status。

這樣暫存區的狀態變成了這樣:
在這裏插入圖片描述

所以,git add實際上是把要提交的所有修改放到暫存區(Stage),然後,執行git commit就可以一次性把暫存區的所有修改提交到分支。

這樣整個狀態如下:
在這裏插入圖片描述

管理修改

Git管理的不是文件,而是修改
修改readme.txt爲如下:
在這裏插入圖片描述
然後git add readme.txt,並git status
在這裏插入圖片描述
再修改 readme.txt 如下:
在這裏插入圖片描述
然後 git commit 一下並查看狀態:
在這裏插入圖片描述
從紅色提示的字可以發現第二次的修改並沒有提交,那麼操作過程其實是這樣的:
第一次修改 --> git add–> 第二次修改 --> git commit,所以只add了一次,所以第二次修改並沒有放到暫存區,那麼commit自然也不會把第二次的修改提交上去。

我們用 git diff HEAD --readme.txt命令來查看工作區和版本庫裏面最新版本的區別。
在這裏插入圖片描述
若我們 add 一下,並再一次 commit ,便可以發現 diff沒有結果顯示了:
在這裏插入圖片描述


撤銷修改

當我們不注意修改成一個錯誤的內容,當在提交這個修改之前,我們可以很容易地糾正它。你可以刪掉最後一行,手動把文件恢復到上一個版本的狀態。如果用 git status 查看一下:
在這裏插入圖片描述
即我們可以用 git restore file 來丟棄工作區中的修改,但有兩種情況:

  1. readme.txt 從修改之後就沒有被放到暫存區中,撤銷修改就回到和版本庫一模一樣的狀態。
  2. readme.txt 已經 add 到暫存區中,又作了修改,撤銷修改就回到添加到暫存區後的狀態。

我們先修改一下 readme.txt
在這裏插入圖片描述
然後我們不 add 其到暫存區,嘗試一下 restore 一下
在這裏插入圖片描述
然後就發現已經回到修改前的狀態了。
但如果我們 add 這個修改,但慶幸沒有commit,所以我們再 commit 之前查看一下狀態:
在這裏插入圖片描述
可以發現使用 git restore --staged file 可以把暫存區的修改撤銷掉(unstage),重新放回工作區。
在這裏插入圖片描述
然後再使用 git restore file 來撤銷到修改前的工作區狀態
在這裏插入圖片描述
可以發現修改已經沒了。

總結一下:

  • 沒有add修改時,使用 git restore file 撤銷修改;
  • 已經add修改,還未commit修改,使用 git restore --staged file 撤銷修改到原來暫存區狀態,然後再 git restore file 撤銷修改到原來工作區的狀態。

刪除文件

我們新建一個 test.txt 文件,然後 add, commit,接着我們使用 rm test.txt 刪除這個文件(即相當於直接在文件),再來查看一下狀態:
在這裏插入圖片描述
可以發現,工作區和版本庫不一致:因爲已經add並commit了,所以版本庫中有test.txt,而工作區沒有了。
接下來有兩種選擇:

  • 確認要刪除,則把版本庫中的也刪除,使用 git rm 刪除並 git commit
    在這裏插入圖片描述
  • 刪錯了,因爲版本庫裏還有呢,所以可以使用 git restore file 把誤刪的文件恢復到最新版本(即撤銷刪除這個修改)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章