Git:學習筆記(二)—工作區與暫存區

工作區和暫存區

git與其他版本控制系統的一個不同之處就是git有暫存區的概念
工作區就是我們創建的目錄,比如說我們之前創建的gitdemo目錄就是一個工作區
在這裏插入圖片描述
版本庫: 工作區中有一個隱藏目錄.git,這個目錄不叫工作區,他是版本庫,git的版本庫中存了很多東西,其中最重要的就是稱爲stage或者(index)的 暫存區,還有Git爲我們創建的第一個分支master,以及指向master的一個指針HEAD
在這裏插入圖片描述
前面講了我們將一個文件提交到git倉庫需要兩步:
第一步:使用git add將文件添加進去,這一步實際上就是先將文件修改添加進暫存區;
第二步:使用git commit進行提交,這一步實際上就是把暫存區的所有內容全部提交到當前分支。
因爲我們在創建git倉庫的時候,git自動爲我們創建了一個唯一分支master,所以,git commit就是往master分支上提交更改。
可以簡單的理解爲,需要修改的文件添加到暫存區,然後一次性提交暫存區的所有修改。
我們來實際操作一下看看情況:
1、修改README.txt文件,然後創建一個新的文件LICENSE
2、使用git status查看一下倉庫狀態
在這裏插入圖片描述可以清楚地看到,README.txt文件被修改了,而LICENSE文件還沒有被添加過,所以他的狀態是Untracked。
3、現在使用git add命令將兩個文件添加,然後再使用git status 命令查看狀態。
在這裏插入圖片描述
現在暫存區的狀態就變成這樣了:
在這裏插入圖片描述
所以,git add就是把所有的修改都添加到暫存區,然後通過git commit將暫存區的修改全部提交到master分支
git commit -m ‘understand how index works’
在這裏插入圖片描述 現在版本庫就變成了下面這樣,暫存區的內容全部提交到了master分支
在這裏插入圖片描述

管理修改和撤銷修改

管理修改

Git之所以比其他版本控制系統優秀,是因爲Git管理和跟蹤的並不是文件,而是修改,什麼是修改,你在文件中添加一行內容刪除一行內容,或者新創建一個文件,這些都叫作修改,爲什麼說Git管理的是修改呢,我們來以實際操作說明
1、我們修改README.txt文件,添加一行內容,然後執行git add將其添加
2、使用git add添加後,我們再次修改README.txt文件,再添加一行內容
3、第二次修改後不進行git add添加,直接使用git commit進行提交
4、查看倉庫狀態,發現第二次修改並沒有被提交
在這裏插入圖片描述
爲什麼會這樣呢,我們回顧一下操作過程:
第一次修改–>git add–>第二次修改–>git commit
我們之前說過,Git管理和跟蹤的是修改,就是說git commit提交的是添加到暫存區中的所有修改,第一次修改後使用git add將修改添加到了暫存區,第二次修改之後,沒有將修改添加到暫存區,因此再執行git commit後,git只能找到第一次的修改,因此就只能提交第一次的修改。
提交後,我們可以使用git diff HEAD – README.txt查看當前版本庫中的文件和當前工作區文件的區別
在這裏插入圖片描述
確實沒有提交,我們可以再進行git add 然後git commit。也可以之前就先彆着急commit 先將兩次修改都add後再進行commit。

撤銷修改

一般情況下,我們是不會出現錯誤的,但是在有些特殊情況下我們修改了文件,但是又不想這樣修改了,幸運的是我們發現的及時,直接進入文件將修改的地方刪除就行了,還可以這樣來,在修改後,使用git status查看狀態可以看到,git提示我們可以使用git checkout – file來丟棄工作區的修改
在這裏插入圖片描述
git checkout – README.txt
這個命令的意思就是,把文件README.txt在工作區的修改全部撤銷,注意,只是在工作區的修改,因此就分爲兩種情況:
第一種:在工作區修改後還爲提交到暫存區,使用這個命令就可以直接回到最初的狀態;
第二種:在工作區修改後使用了git add添加到了暫存區,然後在工作區中又進行了修改,此時,使用這個命令,就是將第二次的修改撤銷,會帶git add之後的狀態。
總之就是讓這個文件回到最近一次commit或者add的狀態。
執行這個命令後我們在來看看文件內容:
在這裏插入圖片描述
可以看到,之前所做的修改確實被撤銷了。
git checkout – file中的–非常重要,沒有–,就變成了切換到另外一條分支的命令。後面再說。
下面先來說說如果在工作區做了修改之後,將修改添加到了暫存區,這樣的話該怎樣撤銷呢,慶幸的是,還沒有提交就好,只是添加到了暫存區的話,還是有辦法撤銷的,我們來實踐一下:
1、修改README.txt文件內容,添加一行,然後使用git add將修改添加到暫存區
2、使用git status查看狀態,就會看到提示,使用git reset HEAD file將暫存區的修改撤銷
在這裏插入圖片描述
git reset可以回退版本,也可以撤銷暫存區的修改,當我們使用HEAD時,表示最新的版本。
在這裏插入圖片描述
我們現在使用git status查看倉庫狀態,可以看到已經撤回到了添加到暫存區之前的狀態,現在暫存區是乾淨的
在這裏插入圖片描述
接下來,我們在使用git checkout – README.txt將工作區的修改撤銷,就可以回到最初的版本了
最後,如果你的修改不但添加到了暫存區,而且已經提交到master分支,這種情況我們可以使用版本回退,回退到之前的版本,只要你的修改沒有推送到遠程倉庫,一切就還有救!!!

刪除文件

在Git中,刪除操作也是一種修改,我們來實際操作一下:
1、新建一個文件,添加並提交
在這裏插入圖片描述
一般情況下,你要刪除一個文件,要麼使用文件管理器,要麼使用rm命令刪除
在這裏插入圖片描述
這種情況下,Git知道你刪除了文件,因此,現在,工作區和版本庫就不一致了,git status會立刻告訴你哪些文件被刪除了:
在這裏插入圖片描述現在有兩個選擇,一是你確定要從版本庫中刪除這個文件,那就用git rm file命令刪除,並且commit提交
在這裏插入圖片描述
還有一種,就是你將文件誤刪除了,現在想將它還原回來,因爲它只是從工作區被刪除了,版本庫裏面還有,因此我們可以輕鬆的將其恢復到最新版本,記住,只能是最新版本,就是說,還原後,你將會丟失掉最後一次commit後修改的內容。
使用git checkout – test.txt還原
在這裏插入圖片描述

總結一下

工作區與暫存區

1、Git中的工作區就是你版本庫所在的那個目錄;
2、版本庫就是在工作區中進行git init之後,出現的.git目錄,裏面包含着被稱爲stage或(index)的暫存區
以及指向當前分支的HEAD指針,還有Git爲我們創建的第一個分支,master分支。
3、暫存區就是在新建或者修改完成一個文件後,使用git add將修改添加到的區域,此時修改還未被提交到版本庫

管理修改與撤銷修改

1、在我們第一次對一個工作區的文件修改並使用git add添加到暫存區後,再去對這個文件進行修改但是
沒有將修改添加到暫存區,然後直接使用git commit進行提交,這樣的話,最終版本庫中的該文件內容與
工作區中該文件的內容是不一樣的,版本庫中的文件中並沒有第二次的修改,這種情況我們可以再次進
行git add 然後重新再提交一次,也可以再之前第二次修改之後就使用git add然後與第一次添加的修改一
同使用git commit提交;
2、撤銷修改,當我們修改了工作區的一個文件後,有突然不想要這次的修改了,除了進入文件刪除之前
的修改。我們還可以使用git checkout -- filename來撤銷之前的修改,--是覆蓋checkout切換分支的功
能,如果我們已經將修改添加到了暫存區,我們可以使用git reset HEAD filename來撤銷之前的git add操
作,回到執行git add之前,然後再使用git checkout -- filename來徹底撤銷修改,如果我們已經將修改使
用git commit提交了,這時,可以使用版本回退來回退到之前的版本。

刪除文件


1、當我們不需要一個文件的時候,可以使用rm命令將其刪除,這個刪除只是將工作區的這個文件刪除
了,但是之前提交到版本庫中的還在,要想徹底刪除的話,需要再工作區使用git rm filename刪除之後,
再使用git commit進行提交才能徹底刪除,其實就跟剛剛創建文件一樣,先創建,然後再commit才能到
版本庫;
2、如果是再工作區中將文件誤刪除了,要想將其恢復,這個在Git中是很簡單的,因爲我們只是在工作
區中刪除了,版本庫中還有,我們可以輕鬆的將其恢復,使用git checkout -- filename。但是這樣的話,
如果你在這個文件最後一次commit之後做了修改,那麼修改的內容將會消失。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章