一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Git筆記-進(jìn)階

 思考的軌跡 2012-02-16

Git筆記-進(jìn)階

發(fā)表評(píng)論?

tag

在git中可以為任意其他對(duì)象添加tag,包括commit,tree,blob,甚至包括tag自身。git中都是用sha-1標(biāo)識(shí)git對(duì)象,這是一個(gè)40個(gè)字符長(zhǎng)度的字符串,不方便記憶,那么可為git對(duì)象添加一個(gè)tag便于標(biāo)識(shí)不同對(duì)象。

添加tag

# git tag tag-name sha-1
$ git tag v1.0 bdc390c2

這樣便為bdc390c2的對(duì)象添加了一個(gè)tag,如果不指定sha-1,會(huì)為最近的一個(gè)commit對(duì)象添加tag

查看tag

使用git tag命令便能查看所有tag

$ git tag

當(dāng)然可以篩選

$ git tag -l 'v1.*'

刪除tag

$ git tag -d <tag-name>

重命名tag

重命名tag有兩種方式:

  1. 刪除原tag,重新添加
  2. git tag -f 強(qiáng)制替換已存在的tag后,再刪除原tag
$ git tag -f <new-tag> <old-tag>
$ git tag -d <old-tag>

tag的分類

  1. 輕量型標(biāo)簽 輕量型標(biāo)簽直接使用 $ git tag <tag-name> <git-object> 即可創(chuàng)建
  2. 標(biāo)注型(annotated)標(biāo)簽 標(biāo)注型標(biāo)簽可記錄更多的信息,使用 $ git tag -a <tag-name> <git-object> -m ‘tag message’即可創(chuàng)意一個(gè)標(biāo)注性標(biāo)簽

分支

建議多使用分支來(lái)維護(hù)項(xiàng)目,便于保證主干的穩(wěn)定性。

創(chuàng)建分支

git中創(chuàng)建分支的方法非常簡(jiǎn)單:

#git branch <branch-name>
$ git branch dev

這樣便從當(dāng)前分支創(chuàng)建了一個(gè)名為dev的分支,可以讓此分支作為開發(fā)分支。使用checkout <branch-name>可以很方便地在分支間進(jìn)行切換:

$ git checkout master
$ git checkout dev

還可以直接使用checkout -b命令來(lái)創(chuàng)建分支后并切換到新的分支

$ git checkout -b dev

重命名分支

$ git branch -rm <old-branch> <new-branch>

遠(yuǎn)程分支

推送本地分支到遠(yuǎn)程服務(wù)器

$ git push <remote> <branch-name>[:<remote-branch-name>]

遠(yuǎn)程分支名如果省略,則使用本地分支名作為遠(yuǎn)程分支名

$ git push <remote> <branch-name>

刪除分支

# 刪除分支
$ git branch -d <branch-name>
# 強(qiáng)制刪除分支
$ git branch -D <branch-name>

刪除遠(yuǎn)程分支

$ git push <remote> :<remote-branch-name>

這個(gè)命令是不是可以從推送本地分支到遠(yuǎn)程分支的命令中得到一點(diǎn)靈感?是的,省略本地分支名后,遠(yuǎn)程分支即被刪除!

查看分支

使用git branch命令可查看當(dāng)前git版本庫(kù)中所有分支:

$ git branch
查看分支

查看分支

當(dāng)前分支會(huì)在分支前加以星號(hào)(*)標(biāo)注。

git branch -v命令將附加顯示最后一次提交相關(guān)信息的分支信息

$ git branch -v
# 查看已合并的分支
$ git branch --merge
# 查看未合并的分支
$ git branch --no-merged

分支合并

當(dāng)一個(gè)分支完成預(yù)期的工作,通過測(cè)試后,便可合并到主干,作為穩(wěn)定版本進(jìn)行后續(xù)開發(fā),合并分支的命令非常簡(jiǎn)單:merge branch-name

$ git merge dev

如果順利,dev分支將自動(dòng)地合并到當(dāng)前分支。當(dāng)然很多時(shí)候會(huì)產(chǎn)生沖突,這個(gè)時(shí)候就需要手動(dòng)堅(jiān)決沖突后再進(jìn)行合并。

在git中如遇沖突,會(huì)顯示沖突提示,合并會(huì)中斷

conflict

conflict

此時(shí)你可以使用git mergetool命令調(diào)用merge工具進(jìn)行手動(dòng)合并

$ git mergetool

mergetool在配置項(xiàng)進(jìn)行配置,以下是使用vimdiff的merge操作界面

mergetool vimdiff

mergetool vimdiff

手動(dòng)解決完沖突后,還需要進(jìn)行一次提交,便完成了整個(gè)手動(dòng)合并過程。

rebase

rebase亦是將分支的修改進(jìn)行“合并”。但在具體行為上略有不同,使用merge進(jìn)行合并,更新部分依然會(huì)視作是從分支而來(lái);而rebase則是直接將更新合并到新分支,相當(dāng)于是在合并分支的直接修改。如果我們的更新是非常小,不足以作為一個(gè)分支進(jìn)行合并,并且不想污染版本日志,那么便可以使用rebase來(lái)合并更新。

ignore

在一個(gè)git版本倉(cāng)庫(kù)中,有時(shí)候很多文件/目錄并不需要使用git進(jìn)行版本維護(hù),那么就可以將這些文件/目錄加入.gitignore文件中,在.gitignore文件中可定義要排除在git版本管理之外的文件/目錄,git默認(rèn)會(huì)讀取項(xiàng)目目錄下的.gitignore文件。

.gitignore使用標(biāo)準(zhǔn)的shell glob模式匹配,shell glob你可以簡(jiǎn)單地理解為一種特特殊化的正則表達(dá)式,其實(shí)要比正則表達(dá)式簡(jiǎn)單許多,語(yǔ)法如下:

  •  允許使用空行,沒有實(shí)際語(yǔ)法作用
  • # 開頭的行視作注釋
  • ! 開頭的模式會(huì)覆蓋之前的定義,將匹配的對(duì)象重新加入跟蹤列表
  • 以/結(jié)尾的模式,git會(huì)屏蔽掉該目錄及其所有子目錄及文件(只屏蔽目錄)
  • 不以/結(jié)尾的模式,git屏蔽同名的文件名及目錄(屏蔽目錄和同名文件)
  • 以/開頭的模式,git只會(huì)屏蔽項(xiàng)目根目錄下的匹配對(duì)象
示例:
#.gitignore example
.txt
.gitignore
!readme.txt
exclude/*.txt

該.gitignore中定義的屏蔽規(guī)則為:

屏蔽所有的txt文件,但是readme.txt例外;屏蔽所有的.gitignore文件;屏蔽exclude目錄下的所有txt文件(包括readme.txt)。

另外,還可以在配置項(xiàng)中通過core.excludesfile來(lái)指定ignore文件。

$ git config core.excludesfile '_myignore'

git配置

git配置文件根據(jù)作用域的不同分為三種:

  • 系統(tǒng)配置文件(git安裝目錄/gitconfig)
  • 用戶配置文件(用戶主目錄/.gitconfig)
  • 項(xiàng)目配置文件(.git/config)

git配置項(xiàng)都通過git config命令寫入,傳入不同參數(shù)寫入不同的配置文件

$ git config --system/--global/
  • git config –system 寫入系統(tǒng)配置
  • git config –global 寫入用戶配置
  • git config 寫入項(xiàng)目配置

具體的配置項(xiàng)設(shè)置參考幫助文檔,$ git config –help

git中的對(duì)象

git對(duì)象

git對(duì)象

git中包含4類對(duì)象:

  • commit 提交對(duì)象
  • tree 目錄
  • blob 文件
  • tag 標(biāo)記

git提交便產(chǎn)生一個(gè)commit對(duì)象,commit對(duì)象中包含一個(gè)tree對(duì)象,tree對(duì)象中又會(huì)包含其他的tree對(duì)象或是blob對(duì)象,blob對(duì)象是最小的組成單元,即獨(dú)立的文件。每個(gè)對(duì)象都對(duì)應(yīng)一個(gè)唯一的SHA-1值,只有當(dāng)文件或目錄有修改時(shí)這個(gè)值才會(huì)重新計(jì)算發(fā)生改變。

  • $ git log 可以查看所有commit對(duì)象
  • $ git ls-tree <commit> 查看commit對(duì)象中的tree對(duì)象
  • $ git show <blob> 查看blob的具體內(nèi)容

git原理

究竟git是如何工作的?打開.git目錄便可一目了然。

  • HEAD 指向當(dāng)前分支
  • config 項(xiàng)目配置文件
  • description 供GitWeb程序使用
  • hooks/ 客戶端與服務(wù)端鉤子腳本
  • info/ 忽略模式
  • index 暫存區(qū)域信息
  • objects/ 所有數(shù)據(jù)內(nèi)容
  • refs/ 指向所有commit的指針

HEAD文件中是形如以下代碼的內(nèi)容:

ref: refs/heads/dev

它指向refs/heads/dev,而dev文件中代碼指向當(dāng)前分支最近的commit對(duì)象

objects目錄中保存有所有g(shù)it對(duì)象,這些對(duì)象取sha-1值的前兩個(gè)字母為一個(gè)目錄,剩下的38個(gè)字符作為文件名保存,在上一節(jié)“git中對(duì)象”中能查看到的所有g(shù)it對(duì)象都保存在這個(gè)目錄中,可以使用git cat-file <sha-1>來(lái)獲取對(duì)象內(nèi)容。

$ git cat-file -p 63a46849

不妨多使用cat-file命名多看看各種對(duì)象的內(nèi)容,有助于理解git對(duì)象的結(jié)構(gòu)。

refs目錄中保存了git中使用的所有引用或指針,因?yàn)椴豢赡苋魏螘r(shí)候都是用sha-1值來(lái)指代對(duì)象,git對(duì)象也可以有“縮略名”。通常refs目錄會(huì)包含以下目錄:

  • heads 保存所有分支的HEAD指針
  • remotes 保存遠(yuǎn)程倉(cāng)庫(kù)信息
  • tags 保存所有tag指針

逐一地查看這些文件內(nèi)容,你就什么都明白了。使用 git update-ref 命令可以直接新建一個(gè)引用。

$ git update-ref refs/heads/test-branch c56dce
$ git update-ref refs/tags/test-tag c56dce

執(zhí)行上述命令,這樣你的git版本庫(kù)中就多了一個(gè)test-branch分支和一個(gè)名為test-tag的tag。

其他的比如git還有些底層的命令,我在文中所列舉的,包括之前基礎(chǔ)篇的都是一些高級(jí)命令??梢允褂眠@些底層命名直接對(duì)git庫(kù)進(jìn)行一些操作,有關(guān)git底層命名的詳細(xì)內(nèi)容,可以到網(wǎng)上去找找。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    人妻少妇久久中文字幕久久| 激情五月综五月综合网| 日本人妻丰满熟妇久久| 精品亚洲一区二区三区w竹菊| 亚洲成人精品免费在线观看| 99热九九在线中文字幕| 欧美精品女同一区二区| 特黄大片性高水多欧美一级| 冬爱琴音一区二区中文字幕| 最好看的人妻中文字幕| 国产精品不卡免费视频| 日韩成人高清免费在线| 国语久精品在视频在线观看| 精品一区二区三区中文字幕| 后入美臀少妇一区二区| 久久99青青精品免费观看| 欧美又黑又粗大又硬又爽| av在线免费观看一区二区三区| 国产乱久久亚洲国产精品| 国产精品日韩欧美第一页| 人妻少妇系列中文字幕| 成人精品网一区二区三区| 久久国产青偷人人妻潘金莲| 91久久精品国产成人| 五月激情综合在线视频| 亚洲最新一区二区三区| 国产精品不卡免费视频| 日本高清中文精品在线不卡| 日韩精品一区二区亚洲| 日韩精品综合福利在线观看| 午夜精品一区二区av| 国产精品香蕉一级免费| 欧美一级内射一色桃子| av中文字幕一区二区三区在线| 隔壁的日本人妻中文字幕版| 亚洲欧美日韩国产自拍| 久久精品亚洲精品一区| 亚洲一区二区精品国产av| 超薄丝袜足一区二区三区| 亚洲黄香蕉视频免费看| 人妻人妻人人妻人人澡|