天天看點

Git了解 git本地建立多個分支互不幹擾

工作原理 / 流程:

Git了解 git本地建立多個分支互不幹擾

1:git init初始化

  主要目錄說明

  objects-存儲對象的目錄,本地倉庫,git中對象分為三種:commit對象,tree對象(多叉樹),blob對象;檔案都是blob對象,二進制存儲;

  Refs-存儲指向branch的最近一次commit對象的指針,也就是commit對象的sha-1值(就是hash值,sha-1是一種雜湊演算法);

  HEAD檔案-該檔案表示目前本地簽出的分支;

  Index檔案-存儲緩沖區(GitExtensions中的stage)的内容,内容包括它指向的檔案的時間戳、檔案名、sha1值等;(git三大區域:工作區,緩沖區,曆史記錄區)

2:git add * 指定檔案寫入緩存區,生成Git對象

  在objects目錄建立目錄和檔案

  git是一套内容尋址系統,它是怎樣尋址的呢?

  Git從核心上來看不過是簡單地存儲鍵值對(key-value)(hashmap),大概結構如下:

  Key=sha-1(file header + file content)

  Value=壓縮(file content)

  Key是一個40位字元的校驗和,前2位作為子目錄,後38位作為檔案名儲存在子目錄下。

Git了解 git本地建立多個分支互不幹擾
Git了解 git本地建立多個分支互不幹擾

3:git cat-file -t 58c9 檢視object的類型

  其中58是目錄,C9是檔案名前兩位(58c9也可替換為key(目錄+檔案名)), 此時傳回blob

4:git cat-file -p 58c9 檢視檔案内容

  傳回檔案内容資訊,不包括檔案名等其他資訊

5:git commit -m用于送出暫存區的檔案;git commit -am用于送出跟蹤過的檔案

  git commit -am送出已跟蹤過本地修改未執行add進入緩存區的檔案=git add +git commit -m合并執行

       其中已跟蹤并修改的檔案産生新的object

  送出後Git倉庫裡面object的類型發生變化,增加了其它目錄(tree commit兩種類型)可用第3點執行新的目錄和檔案,一個是commit,一個是tree

  git cat-file -p 4caa檢視tree類型的檔案資訊,從它儲存的内容來看可以發現它儲存了一個目錄結構(類似于檔案夾),以及每一個檔案(或者子檔案夾)的權限、類型、對應的身份證(SHA1值)、以及檔案名。

  

Git了解 git本地建立多個分支互不幹擾

  此時的Git倉庫關系是tree-blob結構

   

Git了解 git本地建立多個分支互不幹擾
   commit類型資訊,它儲存的是一個送出的資訊,包括對應目錄結構的快照tree的哈希值,上一個送出的哈希值  
Git了解 git本地建立多個分支互不幹擾
Git了解 git本地建立多個分支互不幹擾
   可以了解為commit是一次送出的根節點
Git了解 git本地建立多個分支互不幹擾

  git add 在暫存區索引Index建立與blob object的連結關系

  git commit 根據索引區的連結資訊建立commit-tree-blob的新連結關系,

  同時将版本指針指向新的連結關系,在commit記錄上一版本的key

 6:分支資訊儲存-.git/refs/heads/master檔案存儲最新commit的key位址

Git了解 git本地建立多個分支互不幹擾

 7:Git的三個分區(工作目錄、Index 索引區域、Git倉庫)

  工作區:就是你在電腦裡能看到的目錄。

  版本庫:工作區有一個隐藏目錄.git,這個不算工作區,而是Git的版本庫,由Git object記錄着每一次送出的快照,以及鍊式結構記錄的送出變更曆史。

  暫存區:一般存放在 “.git目錄下” 下的index檔案(.git/index)中,是以我們把暫存區有時也叫作索引(index)這裡面的代碼會在下一次commit被送出到Git倉庫。。

Git了解 git本地建立多個分支互不幹擾
Git了解 git本地建立多個分支互不幹擾

常用指令:

  git log指令顯示從最近到最遠的顯示日志

  git reset --hard HEAD^  回退到上一個版本,如果要回退到上上個版本隻需把HEAD^ 改成 HEAD^^ 以此類推。那如果要回退到前100個版本的話,使用上面的方法肯定不友善,我們可以使用下面的簡便指令操作:git reset --hard HEAD~100 即可

  git reflog 檢視送出記錄版本号

  git reset --hard 版本号退到指定版本

  git checkout -- 檔案名 把在工作區中的檔案做的修改全部撤銷(如果已commit則退回最後一個版本,如果add則從緩存區擷取)

  檢視分支:git branch

  建立分支:git branch name

  切換分支:git checkout name

  建立+切換分支:git checkout –b name

  合并某分支到目前分支:git merge name

  删除分支:git branch –d name

git本地建立多個分支互不幹擾

https://www.cnblogs.com/BonnieWss/p/10711835.html

參考資料

  https://mp.weixin.qq.com/s/UQKrAR3zsdTRz8nFiLk2uQ

  https://blog.csdn.net/Miracle_Yan/article/details/80224839

  https://mp.weixin.qq.com/s/f1nQvj6tX4asH4l3uer6mw

     https://mp.weixin.qq.com/s/IDChhMK_BR1dUJemOnwv9Q

出處:轉載請注明 https://www.cnblogs.com/sun-null/