1. 程式人生 > >Git檔案修改,撤銷修改,刪除

Git檔案修改,撤銷修改,刪除

 

 

參考廖老師教程

Git和其他版本控制系統比如SVN的一個不同之處就是有暫存區的概念。

工作區

在電腦裡能看到的目錄,比如我的倉庫 flask_case 資料夾就是一個工作區:

版本庫

工作區有一個隱藏的目錄 .git ,這不能算是一個工作區,因為它是隱藏的,它是Git的版本庫。

Git的版本庫裡存了很多的東西,其中最重要的是index(或者叫stage)的暫存區,還有Git為我們自動建立的第一個分支master(我們建立的那個倉庫資料夾就是),以及指向master的一個指標叫HEAD

 

 

 

 

 

 

 

 

 

 

我們將檔案往Git版本庫裡新增的時候,是分兩步執行的:

第一步:使用 git add命令將檔案新增進去,這裡實際是將檔案修改新增到暫存區;

第二步:使用git commit提交修改,實際就是將暫存區的所有內容提交到當前分支;

因為我們建立Git版本庫時,Git自動為我們建立了唯一一個 master 分支,所以 git commit 就是往master分支上提交修改。

也就是說,需要提交的檔案修改通通在暫存區呆著,然後git commit 一次性提交暫存區的所有修改。

這裡先對 readme.txt做個修改,然後再到工作區中新增一個test檔案,最後用git status檢視下狀態:

Git提示,readme.txt被修改了,而test從來沒有被新增過,所有狀態為Untracked。

現在需要執行git add 將readme.txt和test新增到暫存區裡面,然後在git status檢視如下,

現在,暫存區的狀態就變成下面重要的狀態了:

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

提交後,如果沒有戳工作區再做修改,那麼工作區就是"乾淨的":

此時提交後的版本庫就變成了如下狀態,而暫存區就沒有任何內容了:


管理修改

Git比其他版本控制系統優秀的地方就在於Git跟蹤並管理的是修改,而非檔案。

舉例說明如下,首先我們對readme.txt檔案做一個修改,這裡我隨便添加了些內容;

然後新增到暫存區,檢視狀態;

然後再修改readme.txt

然後我開始提交:

我再檢視git的狀態,這裡感覺好像落下了什麼。。。



還有修改沒有提交?,我們回顧下剛剛的操作:  第一次修改-> git add ->第二次修改-> git commit

在前面有講到,Git管理的是修改,當你使用git add 命令後,工作區的第一次修改被放到了暫存區,準備提交,但是,我們後面又進行了第二次修改,這次的修改沒有放到暫存區中,所以,git commit 只負責把暫存區的修改提交了,也就是第一次修改被提交了,但是,第二次的修改沒有放到暫存區中,所以沒有被提交。

提交後,使用 git diff HEAD -- readme.txt 命令檢視工作區和版本庫裡面最新版本的區別:

怎麼提交第二次的修改呢,繼續使用 git add 然後再 git commit就可以。

小結:在Git中每次修改,如果不用git add到暫存區,那就不會加入到commit中()


撤銷修改

場景1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout -- file

場景2:當你不但改亂了工作區某個檔案的內容,還新增到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD <file>,就回到了場景1,第二步按場景1操作(git checkout -- file)。

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,那就需要版本回退了,不過前提是沒有推送到遠端庫。

撤銷操作比較簡單,操作的時候,檢視git狀態,裡面會有對應的提示。。。


刪除檔案

在Git中,刪除也是一個修改的操作,這裡我們先新增一個test1.txt檔案,並且提交到Git;

一般情況下,我們會直接在資料夾中將沒用的檔案刪除,或者使用 rm 命令刪除:

這個時候,Git是知道你刪除了檔案,因為工作區和版本庫不一樣了,使用git status可以檢視被刪除的是哪些檔案;現在有兩個選擇:確定要從版本庫中刪除該檔案,使用 git rm 刪除,然後 git commit 提交你做的事情。

這樣,檔案就從版本庫中刪除了。就兩步 git rm file --> git commit 

(小提示:先手動刪除檔案,然後使用git rm <file>和git add<file>效果是一樣的。)

如果不小心刪錯了檔案,版本庫裡還有這個檔案,所以可以命令 git checkout -- file 很輕鬆地把誤刪的檔案恢復到最新版本:

git checkout 其實是用版本庫裡的版本替換工作區的版本,無論工作區是修改還是刪除,都可以還原

注意

1,如果你用rm刪除的檔案,就相當於只刪除了工作區的檔案,如果需要恢復,直接使用 git chekout -- file就可以:

2,如果你用的是git rm刪除檔案,那就相當於不僅刪除了檔案,而且還新增到了暫存區,需要先 git reset HEAD <file>,然後再git checkout -- <file>,如下圖操作所示