git中暫存區和本地庫的區別:暫存區又稱索引區,是工作區與本地倉庫之間的一個過渡區域,它記錄了工作區的程式碼狀態(有無變更,或做了哪些改動);而本地倉庫則記錄了本地代碼的狀態。
本教學操作環境:Windows7系統、Git2.30.0版、Dell G3電腦。
1、git倉庫相關概念的理解
#要深入理解git指令,必須理解git倉庫相關的幾個概念。先看一下一份本機程式碼目錄D:\gittest目錄下:
要注意的是.git是隱藏目錄,需要顯示隱藏檔才能看到。
工作區(working directory):簡單來說保存在本地的檔案或目錄都屬於工作區,平常修改程式碼都是在工作區進行的。一般本地的文件,除了隱藏的.git目錄,其它都屬於工作區。上圖看到的mydir、file1.txt、file2.txt都是屬於工作區。
暫存區(Stage):又稱索引區(index),顧名思義,它是工作區與本地倉庫之間的過渡,它記錄了工作區的程式碼狀態(有無改動,或作了哪些改動)。位於.git目錄中。
本地倉庫(repository):記錄了本機程式碼的狀態,位於.git目錄中。
關於狀態的理解:
想一下,我們平時在修改一份重要的文件時,肯定要先做一份備份,目的是防止修改出錯,最終還能恢復。假如這份文件本身很大,如果備份就會佔用額外較多的空間,這樣就顯得不太划算。還有另外一種方式,就是記錄檔案的修改狀態,而不是對檔案本身進行備份。檔案狀態類似如下描述:
檔案第一行:將xxx換成了****
檔案第三行和第四行之間,增加了一行,內容是… …
說白了文件狀態就是文件的修改記錄,根據修改記錄我們就可以知道我們對文件作了哪些修改,根據修改記錄也可以恢復到文件修改之前的狀態。
2、git指令講解
幾個與檢視狀態相關的指令:
git status 檢視檔案在運作區、暫存區、本地倉庫之間的變化
git diff 查看工作區與暫存區的差異
git diff --cached 查看暫存區與本地倉庫的差異
git diff HEAD 查看工作區與本地倉庫之間的差異
一些命令對應的操作如下:
下面以一個具體的例子來說明本機檔案修改會導致相關區域的變更
修改之前,工作區、暫存區與本機倉庫之間狀態是一致的
(1)本機修改檔案file1 .txt 裡面增加一行add this line
git status 檢視檔案在工作區、暫存區、本地倉庫倉庫之間的變化
上圖中可以看到,Changes not staged for commit:,說明文件在工作區已經發生了變化,但是修改還未提交到暫存區
git diff 查看工作區與暫存區的變化
從圖中可以看出,工作區與暫存區之間發生了變化,這是由於本地文件修改了,並且還未將修改提交到暫存區
git diff HEAD 查看工作區與本地倉庫之間的狀態
從上圖可以看出,工作區與本地倉庫之間也出現了差異。很簡單,此時本地倉庫與暫存區的狀態是一致的
git diff --cached 查看暫存區與本地倉庫,會發現它們之間缺失沒有差異
#(2)將本機修改提交至暫存區
git add . 將本機的修改提交的暫存區
git status
可以看到,修改已經提交到了暫存區:Changes to be committed:
提交之後,用git diff 查看,會發現工作區與暫存區已經沒有了差異。
但是暫存區與工作區有了差異。
git diff --cached
##同樣,用git diff HEAD會發現工作區與本地倉庫還是有差異
(3)將修改提交到本地倉庫
git commit -m “add a line in file1.txt” 將修改從暫存區提交到本地倉庫
git status查看,提示Your branch is ahead of 'origin/master' by 1 commit.表明工作區的修改已經提交的本地倉庫,但是還沒有推送到遠端分支。
git diff、git diff --cached 、git diff HEAD 會發現提示沒有差異。因為工作區的修改已經提交到本地倉庫,此時工作區、暫存區、本地倉庫的狀態是一致的。
逆操作
git add – git checkout 將工作區檔案退回到暫存區狀態,將工作區檔案替換為暫存區檔案。
例如工作區修改了檔案file1.txt,此時還未提交到暫存區。如果想放棄修改,就可以用
git checkout file1.txt將檔案退回到暫存區狀態(放棄修改)
git commit – git reset HEAD 拉取最近一次提交到本地倉庫的文件到暫存區,不影響工作區。
總結:
如果我們想放棄本地檔案(工作區)的某一次修改:
推薦學習:《Git教學》
以上是git中暫存區和本地庫的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!