首頁  >  文章  >  開發工具  >  git中暫存區和本地庫的差別是什麼

git中暫存區和本地庫的差別是什麼

青灯夜游
青灯夜游原創
2021-12-29 17:29:084743瀏覽

git中暫存區和本地庫的區別:暫存區又稱索引區,是工作區與本地倉庫之間的一個過渡區域,它記錄了工作區的程式碼狀態(有無變更,或做了哪些改動);而本地倉庫則記錄了本地代碼的狀態。

git中暫存區和本地庫的差別是什麼

本教學操作環境:Windows7系統、Git2.30.0版、Dell G3電腦。

1、git倉庫相關概念的理解

#要深入理解git指令,必須理解git倉庫相關的幾個概念。先看一下一份本機程式碼目錄D:\gittest目錄下:

git中暫存區和本地庫的差別是什麼
要注意的是.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 查看工作區與本地倉庫之間的差異

一些命令對應的操作如下:
git中暫存區和本地庫的差別是什麼

下面以一個具體的例子來說明本機檔案修改會導致相關區域的變更

修改之前,工作區、暫存區與本機倉庫之間狀態是一致的

(1)本機修改檔案file1 .txt 裡面增加一行add this line

git status 檢視檔案在工作區、暫存區、本地倉庫倉庫之間的變化

git中暫存區和本地庫的差別是什麼

上圖中可以看到,Changes not staged for commit:,說明文件在工作區已經發生了變化,但是修改還未提交到暫存區

git diff 查看工作區與暫存區的變化

从git中暫存區和本地庫的差別是什麼

從圖中可以看出,工作區與暫存區之間發生了變化,這是由於本地文件修改了,並且還未將修改提交到暫存區

git diff HEAD 查看工作區與本地倉庫之間的狀態

git中暫存區和本地庫的差別是什麼

從上圖可以看出,工作區與本地倉庫之間也出現了差異。很簡單,此時本地倉庫與暫存區的狀態是一致的

git diff --cached 查看暫存區與本地倉庫,會發現它們之間缺失沒有差異

#(2)將本機修改提交至暫存區

git add . 將本機的修改提交的暫存區

git status

git中暫存區和本地庫的差別是什麼
可以看到,修改已經提交到了暫存區:Changes to be committed:

提交之後,用git diff 查看,會發現工作區與暫存區已經沒有了差異。

但是暫存區與工作區有了差異。

git diff --cached

##

git中暫存區和本地庫的差別是什麼

同樣,用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中暫存區和本地庫的差別是什麼

git diff、git diff --cached 、git diff HEAD 會發現提示沒有差異。因為工作區的修改已經提交到本地倉庫,此時工作區、暫存區、本地倉庫的狀態是一致的。

逆操作

git add – git checkout 將工作區檔案退回到暫存區狀態,將工作區檔案替換為暫存區檔案。

例如工作區修改了檔案file1.txt,此時還未提交到暫存區。如果想放棄修改,就可以用

git checkout file1.txt將檔案退回到暫存區狀態(放棄修改)

git commit – git reset HEAD 拉取最近一次提交到本地倉庫的文件到暫存區,不影響工作區。

總結:

如果我們想放棄本地檔案(工作區)的某一次修改:

  • 如果修改還未提交到暫存區,就可以使用git checkcout恢復
  • 如果修改已經提交到暫存區,還沒提交到本地倉庫,就先使用git reset HEAD 將暫存區狀態恢復,然後使用git checkout 恢復工作區

推薦學習:《Git教學

以上是git中暫存區和本地庫的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn