首先需要下載安裝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
可以看到
紅色代表本地文件
執(zhí)行命令
git add README.MF #提交某個(gè)文件
git add -A #提交全部文件
git add . #提交全部文件
然后使用git status 查看目前狀態(tài)
綠色部分代表緩存區(qū)文件误债,可以使用git cache rm README.MF刪除緩存區(qū)文件浸船,執(zhí)行如下命令
git rm --cached README.MF
git status
可以刪除緩存區(qū)文件,可以看到 readme文件已經(jīng)又變成了紅色
當(dāng)緩存區(qū)有多個(gè)文件的需要全部刪除的話寝蹈,可以執(zhí)行
git rm --cached *
命令李命,如下圖所示git commit -m '第一次提交'
-m 提交注釋信息
注意,第一次commit 可能需要配置箫老,按要求配置即可封字,看下圖
此命令只是將更新內(nèi)容提交到了本地,并沒有push到遠(yuǎn)端耍鬓,想要Push到遠(yuǎn)端需要現(xiàn)在github新建一個(gè)倉(cāng)庫(kù)
第一次執(zhí)行g(shù)it push命令阔籽,會(huì)提示需要先指定一個(gè)遠(yuǎn)端地址,如下圖所示
登錄GitHub創(chuàng)建一個(gè)自己的倉(cāng)庫(kù)執(zhí)行
git remote add <name> <url>
name 自己指定界斜,url為你在GitHub的倉(cāng)庫(kù)地址
指定完成之后進(jìn)行push操作會(huì)提示先set upstream
按照操作執(zhí)行完成之后
在去GitHub查看仿耽,可以看到已經(jīng)將分支提交到了遠(yuǎn)端,其他用戶就可以進(jìn)行g(shù)it pull操作了
此時(shí)使用git branch查看分支
git branch #查看本地分支
git branch -a #查看所有分支
git branch -av #查看所有分支附帶詳細(xì)信息
此時(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ū)別:
存儲(chǔ)方式不一樣
使用方式不一樣
管理模式不一樣
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ò)程
Git基本使用過(guò)程
3横漏、版本管理模式區(qū)別
git 是一個(gè)分布式的版本管理系統(tǒng)谨设,而要SVN是一個(gè)遠(yuǎn)程集中式的管理系統(tǒng)
集中式
分布式
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è)其它文件夾。
每一個(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 總共 有三種類型的引用:
分支引用
遠(yuǎn)程分支引用
標(biāo)簽引用
查詢比較兩個(gè)版本
git log master..experiment
版本提交歷史網(wǎng)絡(luò)
git log --pretty=format:'%h %s' --graph
查看分支樹
git cat-file -p master^{tree}