日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > 架構(gòu)師社區(qū)
[導(dǎo)讀]上一篇原創(chuàng)寫了圖解Git的第一篇,個(gè)人感覺還是可以,比較基礎(chǔ)的那種,有興趣的可以看一看。這一篇我們繼續(xù)圖解Git,上一篇基本就是基礎(chǔ),這一篇算是進(jìn)階。

上一篇原創(chuàng)寫了圖解Git的第一篇,個(gè)人感覺還是可以,比較基礎(chǔ)的那種,有興趣的可以看一看[],這一篇我們繼續(xù)圖解Git,上一篇基本就是基礎(chǔ),這一篇算是進(jìn)階。

分支管理

Git中比較最重要的一點(diǎn)就是分支的概念,有了分支就有了合并和衍合的操作,「合并」「衍合」能夠「有效的對(duì)代碼版本的管理」。

Git的初始化中有一條默認(rèn)的主分支叫做master,每一次的提交都會(huì)串成一條時(shí)間線,這就是一條分支,當(dāng)前分支由HEAD指針指向:

深入淺出圖解Git,入門到精通(二)

當(dāng)每次發(fā)生代碼提交的時(shí)候,當(dāng)前指向就會(huì)向前形成一個(gè)新的版本,假如再創(chuàng)建一個(gè)新的分支bran,并且當(dāng)前的提交指向新的分支,這樣新的分支隨著時(shí)間的推移就會(huì)形成許多版本:

深入淺出圖解Git,入門到精通(二)

當(dāng)新分支開發(fā)完后,提交倉(cāng)庫(kù),并合并到主干master,最后刪除bran分支,這樣就完成了一次個(gè)人的開發(fā):

深入淺出圖解Git,入門到精通(二)

所以,假如主分支上只建立一條分支的話,分支的合并是非??焖俚模恍枰苿?dòng)master分支到當(dāng)前提交,然后將HEAD指針指向master,最后刪除bran分支就完成了。

但是,事實(shí)上并不是這樣的,在一個(gè)多人協(xié)作的開發(fā)團(tuán)隊(duì)中,往往每個(gè)人都會(huì)建立自己的分支,有自己的提交,最后合并到主干,當(dāng)自己提交的時(shí)候,遠(yuǎn)程倉(cāng)庫(kù)代碼就會(huì)存在自己本地倉(cāng)庫(kù)并未有的代碼,這樣就會(huì)導(dǎo)致push失敗。

例如:程序員Tom和Jerry同時(shí)遷出代碼,他們的初始代碼分支都如下圖所示:

深入淺出圖解Git,入門到精通(二)

當(dāng)Tom開發(fā)自己的業(yè)務(wù)模塊,提交代碼并且合并到主干后,遠(yuǎn)程主干分支如下圖所示:

深入淺出圖解Git,入門到精通(二)

「遠(yuǎn)程倉(cāng)庫(kù)master已經(jīng)不再指向gs234,而是新生成了一個(gè)版本dfd453,作為當(dāng)前指向的版本」

與此同時(shí),Jerry的本地也同時(shí)開發(fā)完自己的模塊后,分支如下圖所示:

深入淺出圖解Git,入門到精通(二)

在Jerry的本地環(huán)境中,他的「本地倉(cāng)庫(kù)master還是指向gs234」,Jerry在自己新建立的一個(gè)分支bran中進(jìn)行開發(fā),開發(fā)完后合并分支,最后master就會(huì)指向ed489。

當(dāng)Jerry再次提交代碼,Git就會(huì)檢查遠(yuǎn)程倉(cāng)庫(kù)與Jerry的本地倉(cāng)庫(kù),進(jìn)行對(duì)比后,發(fā)現(xiàn)遠(yuǎn)程倉(cāng)庫(kù)存在Jerry的本地倉(cāng)庫(kù)不存在的代碼,就需要Jerry將遠(yuǎn)程倉(cāng)庫(kù)執(zhí)行git pull后,自行解決沖突。

上面說了分支基本原理,已經(jīng)管理分支出現(xiàn)的問題,下面我們就來(lái)一步一步的深入操作分支的基本命令。

新建分支

Git新建一個(gè)分支的命令為:git branch <分支名字>,新建立后分之后,切換分支的命令為:git checkout <分支名字>

新建分支的實(shí)質(zhì):「就是新建立一個(gè)引用,指向當(dāng)前提交,master就好比一個(gè)引用」;切換分支的實(shí)質(zhì):就是將HEAD由指向原來(lái)的引用,重新指向要切換的分支的引用上:

深入淺出圖解Git,入門到精通(二)

當(dāng)然上面創(chuàng)建分支并且合并分支的兩條命令可以合并成一條命令:git checkout -b <分支名字>

當(dāng)切換分之后,每次commit提交代碼時(shí)HEAD指針就會(huì)跟隨著新的bran分支移動(dòng),形成bran分支上的每一個(gè)版本:

深入淺出圖解Git,入門到精通(二)

假如,在新的bran分支上開發(fā)到某一個(gè)版本,再次切換回master分支進(jìn)行開發(fā)就會(huì)形成分叉:

深入淺出圖解Git,入門到精通(二)

查看分支

當(dāng)分支創(chuàng)建好了,你可以通過:git branch,來(lái)查看自己本地的分支情況:

深入淺出圖解Git,入門到精通(二)分支前面帶有*號(hào)的表示當(dāng)前的分支,查看分之后,你就可以很清楚的知道自己要checkout哪條分支了。

合并分支

開發(fā)自己模塊后,后面就會(huì)在自己本地進(jìn)行合并分支,合并分支的命令:git merge <分支名字>,它表示「合并指定的分支到當(dāng)前分支」,比如:當(dāng)前分支為master,執(zhí)行:git merge bran,表示合并bran分支到當(dāng)前master分支上。

分支合并也會(huì)有失敗的情況,當(dāng)你的兩條分支都修改的相同的文件,這時(shí)候Git就無(wú)法判斷你要保留哪一個(gè)修改,就會(huì)出現(xiàn)merge沖突。

例如:我先在master分支修改README.md文件,然后提交本地倉(cāng)庫(kù):深入淺出圖解Git,入門到精通(二)然后切換回分支dev,再次修改README.md文件,再次提交

深入淺出圖解Git,入門到精通(二)

最后進(jìn)行合并分支,此時(shí)在你兩次修改的README.md文件中就會(huì)出現(xiàn)兩次修改的沖突代碼:

深入淺出圖解Git,入門到精通(二)

因?yàn)槟銉纱涡薷耐晃募牟僮?,合并后Git并不知道你要保留哪一次的操作,所以它就會(huì)將這個(gè)決定交給你自己決定,它只告訴你文件中哪里的代碼沖突了,具體怎么改就由你自己去弄。

深入淺出圖解Git,入門到精通(二)

刪除分支

最后是刪除自己新建的分支,通過:git branch -d <分支名字>,進(jìn)行刪除分支,假如分支刪除不了,可以通過:git branch -D <分支名字>,強(qiáng)制刪除分支:

深入淺出圖解Git,入門到精通(二)Git中刪除分支的實(shí)質(zhì):dev只是一個(gè)分支的引用,所以刪除分支也就是刪除這個(gè)引用,并不會(huì)刪除任何conmit,所以刪除操作也是非常高效的。

假如一條分支commit的引用被刪除,那么這條分支的就沒有任何引用指向,這樣就會(huì)找不到這條分支,最后就會(huì)被Git回收機(jī)制回收。

查看遠(yuǎn)程

在多人協(xié)作的團(tuán)隊(duì)下,你可能要隨時(shí)查看遠(yuǎn)程倉(cāng)庫(kù)的情況,可以通過:git remote,進(jìn)行查看,加上-v參數(shù)可以查看遠(yuǎn)程倉(cāng)庫(kù)的詳細(xì)情況。

git?remote
git?remote?-v

推送分支

深入淺出圖解Git,入門到精通(二)

分支的推送到遠(yuǎn)程上一節(jié)已經(jīng)提過,使用git push命令就可以進(jìn)行分支的推送,命令后面加上分支的命令,表示具體推送哪條分支:

git?push?origin?master?//?將本地master分支推送到遠(yuǎn)程庫(kù)

拉取分支

分支的拉取使用git pull命令,這條命令相當(dāng)于以下兩條命令:

git?fetch
git?merge

但是一般實(shí)際工作中,都可能會(huì)直接使用git pull命令:

深入淺出圖解Git,入門到精通(二)

分支管理策略

在合并分支的時(shí)候,Git會(huì)以快速合并的模式進(jìn)行合并(Fast forward),但是這種模式刪除分支后,會(huì)丟失分支的信息。

Git中還可以以「普通模式」進(jìn)行合并,在原來(lái)git merge命令后面加上--no-ff參數(shù)即可,合并的命令如下:

$?git?merge?--no-ff?-m?"message"?dev

臨時(shí)存取工作區(qū)的改動(dòng)

在開發(fā)中,若是某一時(shí)刻你想把當(dāng)前的改動(dòng)臨時(shí)進(jìn)行存放起來(lái),可以使用git stash命令,它表示將改動(dòng)的文件存儲(chǔ)到一個(gè)獨(dú)立的存儲(chǔ)區(qū)域,并不會(huì)被提交,當(dāng)再次需要的時(shí)候可以隨時(shí)取出來(lái)。

這里要注意的是:「git stash的是改動(dòng)的文件,也就是被Git追蹤的文件,新添加的文件并沒有被Git追蹤,所以git stash并不會(huì)stash」。

深入淺出圖解Git,入門到精通(二)

git stash命令也可以加上save命令后面再加上備注信息,方便查看:

git?stash?save?"備注信息"

git stash成功后「本地的工作目錄的代碼會(huì)和本地倉(cāng)庫(kù)一樣」git stash后可以通過git stash list命令查看之前stash的歷史記錄,當(dāng)再次需要將改動(dòng)的文件取出來(lái)時(shí)候,可以通過以下命令:

git?stash?pop

git stash pop表示「彈出第一個(gè)被stash的記錄,并且該stash會(huì)從歷史記錄中刪除」;也可以使用git stash apply命令「彈出stash,但是這條命令stash仍然會(huì)保存在stash歷史記錄中」,你也可以通過:git stash drop命令來(lái)刪除。

深入淺出圖解Git,入門到精通(二)

這一篇就只講解了Git的分支原理以及Git的臨時(shí)存取操作,限于篇幅,我們今天就到這里,我們下一期繼續(xù)圖解Git操作,我們下一期再見。

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

深入淺出圖解Git,入門到精通(二)

深入淺出圖解Git,入門到精通(二)

深入淺出圖解Git,入門到精通(二)

長(zhǎng)按訂閱更多精彩▼

深入淺出圖解Git,入門到精通(二)

如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉