git學習筆記(二)

本篇爲git學習筆記的第二篇文章。

一、工作區與暫存區

在Git中暫存區(stage或者index)是重要的概念之一。我們工作的目錄稱爲工作區,還有一個.git隱藏目錄稱爲版本庫,裏面包含暫存區和各個分支。其中存在一個指向當前分支的指針HEAD。

關係如圖所示:
這裏寫圖片描述

如上圖所示,當我們使用git add命令時,我們就將工作區的變動添加到暫存區,當使用git commit命令時就將暫存區的變動提交到了當前分支。

瞭解工作區、暫存區概念便於我們理解許多git命令,下面就學習一些與工作區和暫存區有關的命令。

二、與工作區和暫存區相關的命令

  • git diff 比較文件差異
$ git diff                 #比較工作區和暫存區差異
$ git diff HEAD            #比較HEAD和工作區差異
$ git diff --cached        #比較暫存區和HEAD差異

驗證:新建一個文件diffTest.txt,在文件中寫入一個單詞one,然後執行git add,接着執行git commit提交到版本庫。
然後再在文件第二行寫入單詞two,保存。執行命令git diff
這裏寫圖片描述

git提示文件發生變化,多了一行two。這時執行命令git add,將變動後的文件添加到暫存區。再次執行git diff

這裏寫圖片描述

發現git沒有提示任何內容,這是因爲git diff比較的是工作區和暫存的文件。我們已經將變動後的文件添加到了暫存區,這時工作區和暫存區的文件是一致的。

執行命令git diff –cached對比暫存區和HEAD中文件差異,結果如下:

這裏寫圖片描述

接着我們在文件第三行寫入單詞three。執行命令git diff HEAD,結果如下:

這裏寫圖片描述

git提示有兩行存在差異,這也證明了git diff HEAD對比的是工作區和HEAD中文件差異。


  • 撤銷文件修改
$ git checkout -- filename  #暫存區覆蓋工作區
$ git reset HEAD            #HEAD覆蓋暫存區
$ git checkout HEAD         #HEAD同時覆蓋工作區和暫存區

接着剛剛的操作。此時diffTest.txt文件在工作區、暫存區和HEAD中都是不同的,分別爲one two threeone twoone

使用命令git checkout – filename用暫存區文件覆蓋工作區文件,並查看文件內容,結果如下:

這裏寫圖片描述

可以看到工作區中文件內容已經變成了one two,文件內容被暫存區覆蓋。

接着執行命令git reset HEAD,用HEAD文件覆蓋暫存區文件,並查看暫存區和HEAD文件差異,結果如下:

這裏寫圖片描述
可以看暫存區中文件內容被覆蓋爲one

最後我們執行git checkout HEAD,用HEAD中文件同時覆蓋工作區和暫存區,結果如下:

這裏寫圖片描述

可以看到這時,工作區、暫存區和HEAD中文件內容保持一致。


  • git rm刪除文件
$ git rm filename           #同時刪除工作區和暫存區文件
$ git rm --cached           #只刪除暫存區文件
$ rm                        #只刪除工作區文件

驗證:
新增文件rmTest.txt,並通過git status查看工作區狀態,如下如所示:

這裏寫圖片描述

可以看到rmTest.txt 爲untracked新增文件狀態,執行git addrmTest.txt添加到暫存區,再次通過git status查看狀態,接着執行git rm –cached,最後再次執行git status查看狀態,發現rmTest.txt又恢復到untracked新增文件狀態,說明git rm –cached將暫存區中文件刪除了。

這裏寫圖片描述

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