Git知識結構和使用
阿新 • • 發佈:2021-06-30
1.基本概念
01.工作流程 活躍貢獻者的數量:小型團隊 管理團隊 提交許可權 提交準則 工作流程、派生/管理組織 瞭解如何維護專案 審計 02.技術概念 repository branch track stage init add commit push pull clone origin 是當你執行 git clone 時預設的遠端倉庫名字 master 是當你執行 git init 時預設的起始分支名字 遠端倉庫 origin 通訊時 master 分支的狀態 03.檔案狀態 以README為例 檔案狀態: 已跟蹤 或 未跟蹤 untracked 和 忽略檔案 .gitignore 已跟蹤: 未修改 unmodified,已修改 modified或已放入暫存區 staged git reset HEAD README.md # 取消暫存 git checkout -- README.md # 撤消之前所做的修改--慎重用 .gitignore 的檔案,列出要忽略的檔案的模式 git rm --cached README.md # 從已跟蹤檔案清單中移除(確切地說,是從暫存區域移除 未合併(unmerged)狀態的檔案 重新命名: git mv
2.Git內部原理
01.Git 的資料結構 四個資料物件,三個樹物件,三個提交物件和一個標籤物件 引用型別 HEAD引用 標籤引用 遠端引用(remote reference) 物件型別(資料物件、樹物件 和 提交物件 ),還有第四種標籤物件(tag object) Git 環境變數 02.Git 倉庫中有五個物件: Git 的核心部分是一個簡單的鍵值對資料庫(key-value data store) 三個 blob 物件(儲存著檔案快照)、 一個 樹 物件(記錄著目錄結構和 blob 物件索引) 一個 提交 物件(包含著指向前述樹物件的指標和所有提交資訊) HEAD 上一次提交的快照,下一次提交的父結點 . HEAD 指向當前所在的分支 Index 預期的下一次提交的快照 工作目錄 .git 資料夾中所在的目錄 .git/objects 目錄(即 物件資料庫) Git 分支的本質:一個指向某一系列提交之首的指標或引用 03.Git 伺服器 和Git 客戶端 Git伺服器:git daemon 、 systemctl status git-daemon git協議: 四種不同的協議來傳輸資料:本地協議(Local),HTTP 協議,SSH(Secure Shell)協議及 Git 協議 04. Git 的原始內部資料 檔案系統 .git/hooks 鉤子都被儲存在 Git 目錄下的 hooks 子目錄中 客戶端鉤子分為:提交工作流鉤子、電子郵件工作流鉤子和其它鉤子。 . config 檔案包含專案特有的配置選項 info 目錄包含一個全域性性排除(global exclude)檔案, 用以放置那些不希望被記錄在 .gitignore 檔案中的忽略模式(ignored patterns refs 目錄儲存指向資料(分支、遠端倉庫和標籤等)的提交物件的指標 objects 目錄儲存所有資料內 HEAD 檔案指向目前被檢出的分支;index 檔案儲存暫存區資訊
3.Git命令
01.幫助 git --help git help branch 02..檢視-檢查 git --version #檢視版本 git status # 當前做的哪些更新尚未暫存? 有哪些更新已暫存並準備好下次提交? git diff # 檢視尚未暫存的檔案更新了哪些部分 git diff --staged # 比對已暫存檔案與最後一次提交的檔案差異 git diff --cached git log # 回顧提交歷史 按時間先後順序列出所有的提交,最近的更新排在最上面 git config -l | git config --list git branch -a | git branch --all git remote -v git remote show origin 分支 本地分支 遠端分支 建立分支 切分支 合併分支 刪除分支 03.整合不同分支 變基和合並 Git 中整合來自不同分支的修改主要有兩種方法:merge 以及 rebase 提交歷史是記錄實際發生過什麼 提交歷史是 專案過程中發生的事 01.合分支最容易的方法是 merge 命令 git checkout 分支切換 git merge 合併分支 遇到衝突時的分支合併 git status 命令來檢視那些因包含合併衝突而處於未合併(unmerged)狀態的檔案 衝突解決方案僅保留了其中一個分支的修改, 並且 <<<<<<< , ======= , 和 >>>>>>> 這些行被完全刪除了 對每個檔案使用 git add 命令來將其標記為衝突已解決。 一旦暫存這些原本有衝突的檔案,Git 就會將它們標記為衝突已解決。 git add 02.通過合併操作來整合分叉的歷史: rebase 命令將提交到某一分支上的所有修改都移至另一分支上 管理版本庫,還是幫忙驗證、稽核收到的補丁, git apply 命令要比 patch patch format-patch 生成並通過電子郵件傳送過來的補丁 撤消合併 還原提交 git revert 遠端和本地連線 Git會自動在本地分支與遠端分支之間,建立一種追蹤關係(tracking) 001.git pull = 等同於先做git fetch,再做git merge 002. git push 推送 simple方式 : 不帶任何引數的 git push,預設只推送當前分支 matching方式 :推送所有有對應的遠端分支的本地分支 當前分支與多個主機存在追蹤關係,則可以使用 -u 選項指定一個預設主機 地做git pull合併差異,然後再推送到遠端主機 –force 選項,結果導致遠端主機上更新的版本被覆蓋 04.搜尋 Git 提供了兩個有用的工具來快速地從它的資料庫中瀏覽程式碼和提交 git grep 會查詢你工作目錄的檔案 git log 命令有許多強大的工具可以通過提交資訊甚至是 diff 的內容來找到某個特定的提交 bisect 命令 05.其他 git tag Git 支援兩種標籤:輕量標籤(lightweight)與附註標籤(annotated) git describe 釋出: git archive git reflog 來檢視引用日誌 記錄了最近幾個月你的 HEAD 和分支引用所指向的歷史 Git 託管服務: gitLab GitHub gitee
4.Git資料結構
config 檔案包含專案特有的配置選項
info 目錄包含一個全域性性排除(global exclude)檔案, 用以放置那些不希望被記錄在 .gitignore 檔案中的忽略模式(ignored patterns
refs 目錄儲存指向資料(分支、遠端倉庫和標籤等)的提交物件的指標
objects 目錄儲存所有資料內
HEAD 檔案指向目前被檢出的分支;index 檔案儲存暫存區資訊
├── branches
├── config
├── HEAD
├── index
├── info
│ └── exclude
├── objects
│ ├── 00
│ │ ├── ad0d06ea08f5bfc2716c31006889b19f402b0c
│ │ └── *******************************fdb2c
│ ├── info
│ └── pack
│ ├── pack-bc0ab38dfd8e51db7f0612a9cc02ceb731f5be97.idx
│ └── pack-bc0ab38dfd8e51db7f0612a9cc02ceb731f5be97.pack
│└── refs
│ ├── heads
│ │ ├── dev
│ │ └── master
│ ├── remotes
│ │ └── origin
│ │ ├── dev
│ │ ├── HEAD
│ │ └── master
│ └── tags
├── ORIG_HEAD
├── packed-refs
├── logs
│ ├── HEAD
│ └── refs
│ ├── heads
│ │ ├── dev
│ │ └── master
│ └── remotes
│ └── origin
│ ├── dev
│ ├── HEAD
│ └── master
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── description
├── FETCH_HEAD
├── COMMIT_EDITMSG
參考
https://git-scm.com/book/zh/v2