天天看點

git工作原理和基本概念介紹

1、git工作流程

git工作原理和基本概念介紹

2、Git 工作區、暫存區和版本庫

  1. 工作區:就是你在電腦裡能看到的目錄。
  2. 暫存區:英文叫 stage 或 index。一般存放在 .git 目錄下的 index 檔案(.git/index)中,是以我們把暫存區有時也叫作索引(index)。
  3. 版本庫:工作區有一個隐藏目錄 .git,這個不算工作區,而是 Git 的版本庫。

工作區、版本庫中的暫存區和版本庫之間的關系:

git工作原理和基本概念介紹
  1. 圖中我們可以看出此時 “HEAD” 實際是指向 master 分支的一個"遊标"。是以圖示的指令中出現 HEAD 的地方可以用 master 來替換。
  2. 圖中的 objects 辨別的區域為 Git 的對象庫,實際位于 “.git/objects” 目錄下,裡面包含了建立的各種對象及内容。
  3. 當對工作區修改(或新增)的檔案執行 git add 指令時,暫存區的目錄樹被更新,同時工作區修改(或新增)的檔案内容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的檔案索引中。
  4. 當執行送出操作(git commit)時,暫存區的目錄樹寫到版本庫(對象庫)中,master 分支會做相應的更新。即 master 指向的目錄樹就是送出時暫存區的目錄樹。
  5. 當執行 git reset HEAD 指令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。
  6. 當執行 git rm --cached 指令時,會直接從暫存區删除檔案,工作區則不做出改變。
  7. 當執行 git checkout . 或者 git checkout – 指令時,會用暫存區全部或指定的檔案替換工作區的檔案。這個操作很危險,會清除工作區中未添加到暫存區的改動。
  8. 當執行 git checkout HEAD . 或者 git checkout HEAD 指令時,會用 HEAD 指向的 master 分支中的全部或者部分檔案替換暫存區和以及工作區中的檔案。這個指令也是極具危險性的,因為不但會清除工作區中未送出的改動,也會清除暫存區中未送出的改動。