摘要:對待數(shù)據(jù)更像是一個快照流幾乎所有操作都是本地執(zhí)行保證完整性中所有數(shù)據(jù)存儲前都計算校驗和,然后用校驗和來引用。用以計算校驗和的機制叫做。目錄存儲所有數(shù)據(jù)內容目錄存儲指向數(shù)據(jù)分支的提交對象的指針文件指示目前被檢出的分支文件保存暫存區(qū)信息。
Git起步 Git是什么?
Git是一個免費的開源分布式版本控制系統(tǒng),旨在快速,高效地處理從小型到大型項目的所有事務。
集中式與分布式的區(qū)別:
直接記錄快照,而非差異比較
git會對當時的全部文件制作一個快照并保存這個快照的索引。git對待數(shù)據(jù)更像是一個 快照流
幾乎所有操作都是本地執(zhí)行
Git保證完整性
git中所有數(shù)據(jù)存儲前都計算校驗和,然后用校驗和來引用。git用以計算校驗和的機制叫做SHA-1 hash。是一個由40個十六進制字符組成的字符串。實際上,git數(shù)據(jù)庫中保存的信息都是以文件內容的哈希值來索引,而非文件名。
Git一般只添加數(shù)據(jù)
三種狀態(tài)git有三種狀態(tài):已提交(數(shù)據(jù)已經(jīng)保存在本地倉庫中)、已修改(已修改文件,但是還未保存到倉庫中)、已暫存(對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中)。
由此引出三個工作區(qū)域的概念:Git倉庫、工作目錄、暫存區(qū)域。
首先我們來看一個新的 .git 目錄的結構
HEAD config* description hooks/ info/ objects/ refs/
description文件僅供GitWeb程序使用,我們無需關心。
config文件包含項目特有的配置選項。
info目錄包含一個全局性排除(global exclude)文件,用以放置那些不希望被記錄在.gitignore 文件中的忽略模式(ignored patterns)。
hooks目錄包含客戶端或服務端的鉤子腳本(hook scripts)。
剩下的四個條目很重要:
HEAD文件、(尚待創(chuàng)建的)index文件,和 objects目錄、refs目錄。 這些條目是 Git 的核心組成部分。
objects目錄存儲所有數(shù)據(jù)內容;refs目錄存儲指向數(shù)據(jù)(分支)的提交對象的指針;HEAD文件指示目前被檢出的分支;index 文件保存暫存區(qū)信息。
Git是一個內容尋址文件系統(tǒng),它的核心部分是一個簡單的鍵值對數(shù)據(jù)庫。
是一塊二進制數(shù)據(jù),沒有其他任何指向或任何屬性,甚至連文件名都沒有。
git會根據(jù)文件內容計算出一個hash值,以hash值作為文件索引存儲在Git文件系統(tǒng)中
提交對象是用來保存提交的作者、時間、說明這些信息的,commit-tree除了要指定提交的樹對象,也要提供提交說明,至于提交的作者和時間,則是根據(jù)環(huán)境變量自動生成,并不需要指定。
我們運行 git add 和 git commit 命令時, Git 所做的實質工作——將被改寫的文件保存為數(shù)據(jù)對象,更新暫存區(qū),記錄樹對象,最后創(chuàng)建一個指明了頂層樹對象和父提交的提交對象。這三種主要的 Git 對象——數(shù)據(jù)對象、樹對象、提交對象——最初均以多帶帶文件的形式保存在 .git/objects 目錄下。
Git引用我們可以借助類似于git log 1a410e 這樣的命令來瀏覽完整的提交歷史,但為了能遍歷那段歷史從而找到所有相關對象,你仍須記住 1a410e 是最后一個提交。我們需要一個文件來保存 SHA-1 值,并給文件起一個簡單的名字,然后用這個名字指針來替代原始的 SHA-1 值。
在 Git 里,這樣的文件被稱為 引用(references,或縮寫為 refs)。你可以在 .git/refs 目錄下找到這類含有 SHA-1 值的文件。
附上感覺講的不錯的一篇文章
回滾的選擇
git reset [type] HEAD
git reset用于撤銷未被提交到remote的改動,即撤銷local的修改。除了移動當前分支的HEAD(提交記錄),還可以更改workspace(工作目錄)和index(暫存區(qū)):
--soft:修改HEAD,不修改index和workspace。
--mixed:修改HEAD和index,不修改workspace。默認行為。
--hard:修改HEAD、index、workspace。
git revert
通過新建一個commit來撤銷一次commit所做的修改,是一種安全的方式,并沒有修改commit history
總結:
命令 | 作用域 | 常用場景 |
---|---|---|
git reset | 提交層面 | 在私有分支上舍棄一些沒有提交的更改 |
git reset | 文件層面 | 將文件從緩存區(qū)中移除 |
git checkout | 提交層面 | 切換分支或查看舊版本 |
git checkout | 文件層面 | 舍棄工作目錄中的更改 |
git revert | 提交層面 | 在公共分支上回滾更改 |
git revert | 文件層面 |
git flow介紹
Production 分支
也就是我們經(jīng)常使用的Master分支,這個分支最近發(fā)布到生產(chǎn)環(huán)境的代碼,最近發(fā)布的Release, 這個分支只能從其他分支合并,不能在這個分支直接修改
Develop 分支
這個分支是我們是我們的主開發(fā)分支,包含所有要發(fā)布到下一個Release的代碼,這個主要合并與其他分支,比如Feature分支
Feature 分支
這個分支主要是用來開發(fā)一個新的功能,一旦開發(fā)完成,我們合并回Develop分支進入下一個Release
Release分支
當你需要一個發(fā)布一個新Release的時候,我們基于Develop分支創(chuàng)建一個Release分支,完成Release后,我們合并到Master和Develop分支
Hotfix分支
當我們在Production發(fā)現(xiàn)新的Bug時候,我們需要創(chuàng)建一個Hotfix, 完成Hotfix后,我們合并回Master和Develop分支,所以Hotfix的改動會進入下一個Release
圖解:
百度云 密碼:7ze2
git commit
feat:新功能(feature)
fix:修補bug
docs:文檔(documentation)
style: 格式(不影響代碼運行的變動)
refactor:重構(即不是新增功能,也不是修改bug的代碼變動)
test:增加測試
chore:構建過程或輔助工具的變動
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73083.html
摘要:編程書籍的整理和收集最近一直在學習深度學習和機器學習的東西,發(fā)現(xiàn)深入地去學習就需要不斷的去提高自己算法和高數(shù)的能力然后也找了很多的書和文章,隨著不斷的學習,也整理了下自己的學習筆記準備分享出來給大家后續(xù)的文章和總結會繼續(xù)分享,先分享一部分的 編程書籍的整理和收集 最近一直在學習deep learning深度學習和機器學習的東西,發(fā)現(xiàn)深入地去學習就需要不斷的去提高自己算法和高數(shù)的能力然后...
摘要:我的學習筆記匯總標簽筆記分為兩大部分和筆記內容主要是對一些基礎特性和編程細節(jié)進行總結整理,適合了解基礎語法,想進一步深入學習的人如果覺得不錯,請給,這也是對我的鼓勵,有什么意見歡迎留言反饋目錄基礎鞏固筆記反射基礎鞏固筆記泛型基礎鞏 我的java&javaweb學習筆記(匯總) 標簽: java [TOC] 筆記分為兩大部分:javase和javaweb javase javawe...
閱讀 641·2021-09-22 10:02
閱讀 6374·2021-09-03 10:49
閱讀 568·2021-09-02 09:47
閱讀 2153·2019-08-30 15:53
閱讀 2931·2019-08-30 15:44
閱讀 902·2019-08-30 13:20
閱讀 1815·2019-08-29 16:32
閱讀 892·2019-08-29 12:46