Git 學習筆記整理

2021-09-12 23:04:00 字數 2918 閱讀 3140

git是什麼?

git是乙個免費的開源分布式版本控制系統,旨在快速,高效地處理從小型到大型專案的所有事務。

集中式與分布式的區別:

git幾個特性

三種狀態

git有三種狀態:已提交(資料已經儲存在本地倉庫中)、已修改(已修改檔案,但是還未儲存到倉庫中)、已暫存(對乙個已修改檔案的當前版本做了標記,使之包含在下次提交的快照中)。

由此引出三個工作區域的概念:git倉庫、工作目錄、暫存區域。

首先我們來看乙個新的.git目錄的結構

head

config*

description

hooks/

info/

objects/

refs/

description檔案僅供gitweb程式使用,我們無需關心。

config檔案包含專案特有的配置選項。

info目錄包含乙個全域性性排除(global exclude)檔案,用以放置那些不希望被記錄在.gitignore 檔案中的忽略模式(ignored patterns)。

hooks目錄包含客戶端或服務端的鉤子指令碼(hook scripts)。

剩下的四個條目很重要:

head檔案、(尚待建立的)index檔案,和objects目錄refs目錄。 這些條目是 git 的核心組成部分。

objects目錄儲存所有資料內容;refs目錄儲存指向資料(分支)的提交物件的指標;head檔案指示目前被檢出的分支;index 檔案儲存暫存區資訊。

git物件

git是乙個內容定址檔案系統,它的核心部分是乙個簡單的鍵值對資料庫。

資料物件(blob object)

是一塊二進位制資料,沒有其他任何指向或任何屬性,甚至連檔名都沒有。

git會根據檔案內容計算出乙個hash值,以hash值作為檔案索引儲存在git檔案系統中

樹物件(tree object)

提交物件(commit object)

提交物件是用來儲存提交的作者、時間、說明這些資訊的,commit-tree除了要指定提交的樹物件,也要提供提交說明,至於提交的作者和時間,則是根據環境變數自動生成,並不需要指定。

我們執行 git add 和 git commit 命令時, git 所做的實質工作——將被改寫的檔案儲存為資料物件,更新暫存區,記錄樹物件,最後建立乙個指明了頂層樹物件和父提交的提交物件。這三種主要的 git 物件——資料物件、樹物件、提交物件——最初均以單獨檔案的形式儲存在 .git/objects 目錄下。

git引用

我們可以借助類似於git log 1a410e 這樣的命令來瀏覽完整的提交歷史,但為了能遍歷那段歷史從而找到所有相關物件,你仍須記住 1a410e 是最後乙個提交。我們需要乙個檔案來儲存 sha-1 值,並給檔案起乙個簡單的名字,然後用這個名字指標來替代原始的 sha-1 值。

在 git 裡,這樣的檔案被稱為 引用(references,或縮寫為 refs)。你可以在 .git/refs 目錄下找到這類含有 sha-1 值的檔案。

git reset、git checkout、git revert的選擇

git reset [type] head

git reset用於撤銷未被提交到remote的改動,即撤銷local的修改。除了移動當前分支的head(提交記錄),還可以更改workspace(工作目錄)和index(暫存區):

git revert

通過新建乙個commit來撤銷一次commit所做的修改,是一種安全的方式,並沒有修改commit history

總結:

命令作用域常用場景

git reset

提交層面

在私有分支上捨棄一些沒有提交的更改

git reset

檔案層面

將檔案從快取區中移除

git checkout

提交層面

切換分支或檢視舊版本

git checkout

檔案層面

捨棄工作目錄中的更改

git revert

提交層面

在公共分支上回滾更改

git revert

檔案層面

git flow介紹

git flow常用的分支

git常用命令

git提交規範

學習筆記整理 Git

開源 分布式 版本控制工具 svn為集中式 分為 本地倉庫與遠端倉庫 團隊協同開發專案 工作目錄working tree 暫存區 index 本地倉庫repository 暫存區 遠端倉庫remote repository 工具 tortoisegit idea smartgit sourcetre...

git學習筆記整理 8 別名

git config檔案來輕鬆地為每乙個命令設定乙個別名 git config global alias.co checkout git config global alias.br branch git config global alias.ci commit git config global...

Git學習筆記整理純理論

1.git是分布式的,svn是集中式的 2.git每個歷史版本儲存完整的檔案,svn儲存檔案的差異 3.git可離線完成大部分操作,svn必須與 伺服器進行網路互動 4.git有著優雅的分支和合併功能 5.git有著更強的撤銷修改和修改版本歷史的能力 6.git速度更快,效率更高 工作區 我們編輯 ...