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ǔ)過程演示

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基本使用過程


image.png

Git基本使用過程

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í)候就通過其中一個(gè)鍵將期取回并替換。

l 模擬演示git 版寫入與回滾過程

查找所有的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.

通過以下命令即可查看

查看分支樹

git cat-file -p master^{tree}

3、git提交對(duì)象

一次提交即為當(dāng)前版本的一個(gè)快照,該快照就是通過提交對(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

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

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

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

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

l 演示文件提交過程

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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容