git創(chuàng)建提交分支冒嫡,基本命令

首先需要下載安裝git 工具
此處詳解演示新建git項(xiàng)目,并實(shí)現(xiàn)對(duì)項(xiàng)目的add commit push 等等操作
新建項(xiàng)目

git init luban

進(jìn)入新建的項(xiàng)目目錄下全释,執(zhí)行命令

echo "luban is  a good man 1" > README.MF

將readme文件提交到git倉(cāng)庫(kù),新建完成執(zhí)行

git status

可以看到


image.png

紅色代表本地文件
執(zhí)行命令

git add README.MF   #提交某個(gè)文件       
git add -A                     #提交全部文件
git  add .                       #提交全部文件

然后使用git status 查看目前狀態(tài)

image.png

綠色部分代表緩存區(qū)文件误债,可以使用git cache rm README.MF刪除緩存區(qū)文件浸船,執(zhí)行如下命令

git rm --cached README.MF
git status

image.png

可以刪除緩存區(qū)文件,可以看到 readme文件已經(jīng)又變成了紅色
當(dāng)緩存區(qū)有多個(gè)文件的需要全部刪除的話寝蹈,可以執(zhí)行git rm --cached *命令李命,如下圖所示
image.png

git commit -m '第一次提交'
-m 提交注釋信息

注意,第一次commit 可能需要配置箫老,按要求配置即可封字,看下圖

image.png
image.png

此命令只是將更新內(nèi)容提交到了本地,并沒有push到遠(yuǎn)端耍鬓,想要Push到遠(yuǎn)端需要現(xiàn)在github新建一個(gè)倉(cāng)庫(kù)
第一次執(zhí)行g(shù)it push命令阔籽,會(huì)提示需要先指定一個(gè)遠(yuǎn)端地址,如下圖所示


image.png

登錄GitHub創(chuàng)建一個(gè)自己的倉(cāng)庫(kù)執(zhí)行

git remote add <name> <url>
name 自己指定界斜,url為你在GitHub的倉(cāng)庫(kù)地址
image.png

指定完成之后進(jìn)行push操作會(huì)提示先set upstream
按照操作執(zhí)行完成之后


image.png

在去GitHub查看仿耽,可以看到已經(jīng)將分支提交到了遠(yuǎn)端,其他用戶就可以進(jìn)行g(shù)it pull操作了


image.png

此時(shí)使用git branch查看分支
git branch         #查看本地分支
git branch -a    #查看所有分支
git branch -av  #查看所有分支附帶詳細(xì)信息
image.png

此時(shí)可以看到本地master和遠(yuǎn)端的master的版本號(hào)一樣各薇,當(dāng)本地發(fā)生變化commit但是還沒有push的時(shí)候项贺,二者的版本ID就會(huì)不一樣了

git基本命令

#查看遠(yuǎn)程配置
git remote
#添加遠(yuǎn)程地址
git remote add origin http:xxx.xxx
#刪除遠(yuǎn)程地址
git remote remove origin 
#上傳新分支至遠(yuǎn)程
git push --set-upstream origin master 
#將本地分支與遠(yuǎn)程建立關(guān)聯(lián)
git branch --track --set-upstream-to=origin/test test
#檢出分支
git checkout -b <name>
#切換分支
git checkout 分支名稱
#刪除分支
git branch -d 分支名稱
git branch -D 分支名稱 # 強(qiáng)制刪除
#刪除遠(yuǎn)程分支
git push <remote_name> --delete 遠(yuǎn)程分支名稱 # 大部分情況下<remote_name>為origin
#查看分支
git branch    # 查看本地分支
git branch -a # 查看遠(yuǎn)程和本地所有分支
git branch -r # 查看遠(yuǎn)程分支
#新建分支
新建分支可以使用git checkout -b <name> 基于當(dāng)前分支新建一個(gè)分支,并切換到新建的分支
也可以使用
git branch <name>  基于當(dāng)前分支創(chuàng)建新分支
git branch <new> <base>   基于base分支創(chuàng)建分支new峭判,其中base可以是分支名开缎,提交版本號(hào)等。
#合并分支
git merge

日志管理

#查看當(dāng)前分支下所有提交日志
git log
#查看當(dāng)前分支下所有提交日志
git log {branch}
# 單行顯示日志
git log --oneline
# 比較兩個(gè)版本的區(qū)別
git log master..experiment

#以圖表的方式顯示提交合并網(wǎng)絡(luò)
git log --pretty=format:'%h %s' --graph

git底層原理

GIT 與 svn 主要區(qū)別:

  1. 存儲(chǔ)方式不一樣

  2. 使用方式不一樣

  3. 管理模式不一樣

1林螃、存儲(chǔ)方式區(qū)別

GIT把內(nèi)容按元數(shù)據(jù)方式存儲(chǔ)類似k/v數(shù)據(jù)庫(kù)奕删,而SVN是按文件(新版svn已改成元數(shù)據(jù)存儲(chǔ))

n 演示git 存儲(chǔ)過(guò)程演示

cd .git/objects/df/

git cat-file -p df70460b4b4aece5915caf5c68d12f560a9fe3e4

echo 'version1' > text.txt

git hash-object -w text.txt

2、使用方式區(qū)別

從本地把文件推送遠(yuǎn)程服務(wù)疗认,SVN只需要commint 而GIT需要 add完残、commint、push 三個(gè)步驟

SVN基本使用過(guò)程


image.png

Git基本使用過(guò)程

image.png

3横漏、版本管理模式區(qū)別

git 是一個(gè)分布式的版本管理系統(tǒng)谨设,而要SVN是一個(gè)遠(yuǎn)程集中式的管理系統(tǒng)

集中式

image.png

分布式

image.png

1、GIT存儲(chǔ)對(duì)像(hashMap)

Git 是一個(gè)內(nèi)容尋址文件系統(tǒng)缎浇,其核心部分是一個(gè)簡(jiǎn)單的鍵值對(duì)數(shù)據(jù)庫(kù)(key-value data store)扎拣,你可以向數(shù)據(jù)庫(kù)中插入任意內(nèi)容,它會(huì)返回一個(gè)用于取回該值的hash 鍵。

git 鍵值庫(kù)中插入數(shù)據(jù)

echo 'luban is good man' | git hash-object -w --stdin

79362d07cf264f8078b489a47132afbc73f87b9a

基于鍵獲取指定內(nèi)容

git cat-file -p 79362d07cf264f8078b489a47132afbc73f87b9a

Git基于該功能 把每個(gè)文件的版本中內(nèi)容都保存在數(shù)據(jù)庫(kù)中二蓝,當(dāng)要進(jìn)行版本回滾的時(shí)候就通過(guò)其中一個(gè)鍵將期取回并替換誉券。

l 模擬演示git 版寫入與回滾過(guò)程

查找所有的git 對(duì)像

find .git/objects/ -type f

寫入版本1

echo 'version1' > README.MF; git hash-object -w README.MF;

寫入版本2

echo 'version2' > README.MF; git hash-object -w README.MF;

寫入版本3

echo 'version3' > README.MF; git hash-object -w README.MF;

回滾指定版本

git cat-file -p c11e96db44f7f3bc4c608aa7d7cd9ba4ab25066e > README.MF

所以我們平常用的 git add 其實(shí)就是把修改之后的內(nèi)容 插入到鍵值庫(kù)中。當(dāng)我們執(zhí)行 git add README.MF 等同于執(zhí)行了 git hash-object -w README.MF 把文件寫到數(shù)據(jù)庫(kù)中刊愚。

我們解決了存儲(chǔ)的問題踊跟,但其只能存儲(chǔ)內(nèi)容同并沒有存儲(chǔ)文件名,如果要進(jìn)行回滾 怎么知道哪個(gè)內(nèi)容對(duì)應(yīng)哪個(gè)文件呢百拓?接下要講的就是樹對(duì)象琴锭,它解決了文件名存儲(chǔ)的問題 。

2衙传、GIT樹對(duì)像

樹對(duì)像解決了文件名的問題决帖,它的目的將多個(gè)文件名組織在一起,其內(nèi)包含多個(gè)文件名稱與其對(duì)應(yīng)的Key和其它樹對(duì)像的用引用蓖捶,可以理解成操作系統(tǒng)當(dāng)中的文件夾地回,一個(gè)文件夾包含多個(gè)文件和多個(gè)其它文件夾。

image.png

每一個(gè)分支當(dāng)中都關(guān)聯(lián)了一個(gè)樹對(duì)像俊鱼,他存儲(chǔ)了當(dāng)前分支下所有的文件名及對(duì)應(yīng)的 key.

通過(guò)以下命令即可查看

查看分支樹

git cat-file -p master^{tree}

3刻像、git提交對(duì)象

一次提交即為當(dāng)前版本的一個(gè)快照,該快照就是通過(guò)提交對(duì)像保存并闲,其存儲(chǔ)的內(nèi)容為:一個(gè)頂級(jí)樹對(duì)象细睡、上一次提交的對(duì)像啥希、提交者用戶名及郵箱帝火、提交時(shí)間戳溜徙、提交評(píng)論。

$ git cat-file -p b2395925b5f1c12bf8cb9602f05fc8d580311836

tree 002adb8152f7cd49f400a0480ef2d4c09b060c07

parent 8be903f5e1046b851117a21cdc3c80bdcaf97570

author tommy <tommy@tuling.com> 1532959457 +0800

committer tommy <tommy@tuling.com> 1532959457 +0800

通過(guò)上面的知識(shí)犀填,我們可以推測(cè)出從修改一個(gè)文件到提交的過(guò)程總共生成了三個(gè)對(duì)像:

一個(gè)內(nèi)容對(duì)象 ==> 存儲(chǔ)了文件內(nèi)容

一個(gè)樹對(duì)像 ==> 存儲(chǔ)了文件名及內(nèi)容對(duì)像的key

一個(gè)提交對(duì)像 ==> 存儲(chǔ)了樹對(duì)像的key 及提交評(píng)論蠢壹。

l 演示文件提交過(guò)程

4、GIT引用

當(dāng)我們執(zhí)行 git branch {branchName} 時(shí)創(chuàng)建了一個(gè)分支九巡,其本質(zhì)就是在git 基于指定提交創(chuàng)建了一個(gè)引用文件图贸,保存在 .git\refs\heads\ 下。

l 演示分支的創(chuàng)建

 git branch dev
 cat.git\refs\heads\dev

git 總共 有三種類型的引用:

  1. 分支引用

  2. 遠(yuǎn)程分支引用

  3. 標(biāo)簽引用

查詢比較兩個(gè)版本

git log master..experiment

版本提交歷史網(wǎng)絡(luò)

git log --pretty=format:'%h %s' --graph

查看分支樹

git cat-file -p master^{tree}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冕广,一起剝皮案震驚了整個(gè)濱河市疏日,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撒汉,老刑警劉巖制恍,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異神凑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門溉委,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鹃唯,“玉大人,你說(shuō)我怎么就攤上這事瓣喊∑禄牛” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵藻三,是天一觀的道長(zhǎng)洪橘。 經(jīng)常有香客問我,道長(zhǎng)棵帽,這世上最難降的妖魔是什么熄求? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮逗概,結(jié)果婚禮上弟晚,老公的妹妹穿的比我還像新娘。我一直安慰自己逾苫,他們只是感情好卿城,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著铅搓,像睡著了一般瑟押。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上星掰,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天多望,我揣著相機(jī)與錄音,去河邊找鬼蹋偏。 笑死便斥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的威始。 我是一名探鬼主播枢纠,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼黎棠!你這毒婦竟也來(lái)了晋渺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脓斩,失蹤者是張志新(化名)和其女友劉穎木西,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體随静,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡八千,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年吗讶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恋捆。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡照皆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沸停,到底是詐尸還是另有隱情膜毁,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布愤钾,位于F島的核電站瘟滨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏能颁。R本人自食惡果不足惜杂瘸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劲装。 院中可真熱鬧胧沫,春花似錦、人聲如沸占业。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谦疾。三九已至南蹂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間念恍,已是汗流浹背六剥。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留峰伙,地道東北人疗疟。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瞳氓,于是被迫代替她去往敵國(guó)和親策彤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355