工作原理 / 流程:

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位作為檔案名儲存在子目錄下。
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倉庫關系是tree-blob結構
git add 在暫存區索引Index建立與blob object的連結關系
git commit 根據索引區的連結資訊建立commit-tree-blob的新連結關系,
同時将版本指針指向新的連結關系,在commit記錄上一版本的key
6:分支資訊儲存-.git/refs/heads/master檔案存儲最新commit的key位址
7:Git的三個分區(工作目錄、Index 索引區域、Git倉庫)
工作區:就是你在電腦裡能看到的目錄。
版本庫:工作區有一個隐藏目錄.git,這個不算工作區,而是Git的版本庫,由Git object記錄着每一次送出的快照,以及鍊式結構記錄的送出變更曆史。
暫存區:一般存放在 “.git目錄下” 下的index檔案(.git/index)中,是以我們把暫存區有時也叫作索引(index)這裡面的代碼會在下一次commit被送出到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/