日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Git的分支命令详解

發(fā)布時(shí)間:2025/4/16 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Git的分支命令详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

我們已經(jīng)了解了git非常重要的三個(gè)組件:blob、commit、tree,這三個(gè)組件都是以二進(jìn)制的方式存儲(chǔ)的,
而且都是用hash碼作為主鍵的唯一名稱。

接下來(lái)我們將詳細(xì)的介紹git的分支。

分支在項(xiàng)目的開發(fā)過程中是非常重要的,分支旨在解決版本管理之中的沖突問題。分支的使用一定要在整個(gè)項(xiàng)目團(tuán)隊(duì)中達(dá)成一致,否則分支太多,最后合并的時(shí)候會(huì)存在一大堆的問題,目前已經(jīng)有了一套成熟的分支管理體系git-flow,這套體系我們會(huì)在以后詳細(xì)介紹,這一次我們主要介紹git和分支相關(guān)的各種命令。

1、首先建立自己的git目錄。進(jìn)行如下操作:

D:\test\git>git init Initialized empty Git repository in D:/test/git/.git/ ***完成工廠的創(chuàng)建D:\test\git>echo a > a.txtD:\test\git>git add .D:\test\git>git commit -m "add a.txt" [master (root-commit) df11b43] add a.txt1 file changed, 1 insertion(+)create mode 100644 a.txt ***完成第一版本的提交D:\test\git>echo a1 > a1.txtD:\test\git>git add .D:\test\git>git commit -m "add a1.txt" [master e5fb3fb] add a1.txt1 file changed, 1 insertion(+)create mode 100644 a1.txt ***完成第二個(gè)版本的提交D:\test\git>git log commit e5fb3fba474eaa5e429bd51945caeae29b46e7b9 Author: pm <pm@gmail.com> Date: Sat Dec 31 22:08:23 2016 +0800add a1.txtcommit df11b43c129bd3761b0855ef146d0a8a9f9183a6 Author: pm <pm@gmail.com> Date: Sat Dec 31 22:02:43 2016 +0800add a.txt***通過git log發(fā)現(xiàn)已經(jīng)存在兩個(gè)版本了。

通過以上操作基本完成了項(xiàng)目的初始化操作,這里我們建立了兩個(gè)版本。

2、接下來(lái)我們使用下一個(gè)命令來(lái)創(chuàng)建一個(gè)分支。

git branch b1

這樣就創(chuàng)建好了一個(gè)分支b1,可以通過:

git branch

查詢所有的分支:

我們發(fā)現(xiàn)有兩個(gè)分支,一個(gè)是master,另外一個(gè)是剛才創(chuàng)建的b1,master是綠色的并且前面有個(gè)*,表示
我們目前處于master分支。

現(xiàn)在的狀態(tài):
????有兩個(gè)分支,有兩個(gè)文件a.txt和a1.txt。

3、下一步我們需要轉(zhuǎn)換到b1這個(gè)分支中,使用下面的命令:

git checkout b1

此時(shí)就可以轉(zhuǎn)換到b1的分支中,同樣我們也可以通過如下命令完成分支的創(chuàng)建和轉(zhuǎn)換:

git checkout -b b2

這將會(huì)創(chuàng)建一個(gè)分支b2,并且切換到分支b2中

4、我們就在b2分支中進(jìn)行一些修改,并且完成一次版本的提交。

此時(shí)在b2分支中就有了三次提交,而且有了三個(gè)文件。

我們?cè)偾袚Q回分支master看看情況:

我們發(fā)現(xiàn)master分支看不到b2分支的任何信息,而且文件也沒有在b2分支中添加的b2.txt。

我們繼續(xù)在master分支中添加一個(gè)文件m.txt。然后完成版本的提交:

此時(shí)在master中有3個(gè)文件:a.txt,a1.txt,m.txt,其中m.txt是在分支創(chuàng)建之后才創(chuàng)建,而且目前master分支
也有三個(gè)commit,切換回b2分支,查詢文件:

????我們發(fā)現(xiàn)在b2上并不存在master在創(chuàng)建分支之后的信息,此時(shí)master分支的修改不會(huì)在b1或者b2中
????有所呈現(xiàn)。

我們繼續(xù)如下操作,選擇b2分支,然后再次創(chuàng)建一個(gè)分支b2_1:

此時(shí)需要注意的是我們是在b2分支上創(chuàng)建的分支b2_1,所以b2_1分支僅僅只能看到b2分支上的東西,
這里就得出了一個(gè)結(jié)論,在某個(gè)分支上創(chuàng)建的分支是以該分支為基礎(chǔ)的。此時(shí)在b2_1中添加文件并且完成
提交。并且切換到b1中進(jìn)行一次版本的提交,再在b2中進(jìn)行一次版本提交,執(zhí)行的命令如下:

D:\test\git>git checkout b2_1 Already on 'b2_1'D:\test\git>echo b2 > b2_1.txtD:\test\git>git add .D:\test\git>git commit -m "b2_1 add b2_1.txt" [b2_1 29f4946] b2_1 add b2_1.txt1 file changed, 1 insertion(+)create mode 100644 b2_1.txt ***在b2_1分支完成b2_1.txt的添加、提交D:\test\git>git checkout b1 Switched to branch 'b1'D:\test\git>echo b1 > b1.txtD:\test\git>git add .D:\test\git>git commit -m "b1 add b1.txt" [b1 4a3143a] b1 add b1.txt1 file changed, 1 insertion(+)create mode 100644 b1.txt *** 在b1分支完成b1.txt的添加、提交D:\test\git>git checkout b2 Switched to branch 'b2'D:\test\git>echo b2 >> b2.txtD:\test\git>git add .D:\test\git>git commit -m "b2 update b2.txt" [b2 7911400] b2 update b2.txt1 file changed, 1 insertion(+) ***在b2分支完成b2.txt的修改、提交

查看當(dāng)前每個(gè)分支的情況,可以使用如下命令讓git log 在一行顯示:

git log --pretty=oneline

有沒有發(fā)現(xiàn),現(xiàn)在分支已經(jīng)開始混亂了,我們簡(jiǎn)單分析下分支目前的狀態(tài):

我們最早的master分支有兩次提交,之后創(chuàng)建了b1和b2分支,并且分別完成了一次提交,然后在master上也完成了一次提交,在b2分支上又創(chuàng)建了新的分支b2_1,然后完成了一次提交。大家有沒有發(fā)現(xiàn)不管怎么分析,當(dāng)分支變多之后也很難進(jìn)行管理,這也就是為什么我們要確定分支管理思路的原因,很幸運(yùn),git-flow為我們定義了一套合理的分支管理流程,我們將會(huì)在后面來(lái)進(jìn)行介紹。

現(xiàn)在我們已經(jīng)了解了分支的創(chuàng)建操作,之后我們需要對(duì)分支進(jìn)行合并,剛才我們的操作是人為避開了沖突,我們先了解分支合并步驟,之后再來(lái)看產(chǎn)生沖突之后的情況。分支的合并非常的簡(jiǎn)單,只要在需要合并的分支上使用git merge 要合并的分支就完成了。

5、下面的操作完成了在master分支上合并b1:

git checkout master git merge b1

合并非常的順利,但是注意,合并完成之后,會(huì)產(chǎn)生一個(gè)新的commit組件,通過cat-file查詢這個(gè)組件,
我們會(huì)發(fā)現(xiàn)該組件有兩個(gè)parent,看看這兩parent的id,就是原來(lái)的master的最新版本id和b1的最新
版本的id。我們發(fā)現(xiàn)一個(gè)版本是可能存在多個(gè)parent的,只要分支進(jìn)行合并之后,parent指向了它的
上一個(gè)版本。

接著我們來(lái)合并b2分支,b2分支有些特殊,因?yàn)閎2分支上還存在b2_1分支。

git merge b2

我們發(fā)現(xiàn)合并非常的順利,git并不會(huì)將b2_1的內(nèi)容合并進(jìn)來(lái),我們可以繼續(xù)執(zhí)行g(shù)it merge b2_1完成合并,也同樣順利完成,git log --pretty=oneline查詢,我們發(fā)現(xiàn)每次合并都產(chǎn)生了新的commit組件:

我們發(fā)現(xiàn)git的分支合并非常的靈活高效,在合并完分支之后我們就需要?jiǎng)h除多余的分支,
使用-d參數(shù)完成刪除:

git branch -d b1

使用以上命令就完成了對(duì)b1分支的刪除,之后我們來(lái)刪除b2分支,我們發(fā)現(xiàn)b2分支的刪除也非常的順利,而且刪除完成之后b2_1分支依然存在。我們發(fā)現(xiàn)雖然b2_1是在b2的基礎(chǔ)上創(chuàng)建的,但兩者之間的關(guān)聯(lián)其實(shí)并不密切(后面我們會(huì)了解到分支的名稱僅僅只是那個(gè)hashid的標(biāo)示,刪除了分支,其實(shí)版本依然是存在的)。而且,我們發(fā)現(xiàn)b2_1上的parent依然是我們刪除了b2分支的版本。

但是此時(shí)執(zhí)行g(shù)it branch -d b2_1,我們發(fā)現(xiàn)報(bào)了一個(gè)錯(cuò)誤。他告訴我們b2_1并沒有被完全合并,由于它是在b2上衍生出來(lái)的分支,應(yīng)該要先合并到b2中,但是此時(shí)b2已經(jīng)被刪除了,我們可以使用
git branch -D b2_1強(qiáng)行刪除分支。所以雖然git對(duì)分支的合并的管理非常靈活,但是在實(shí)際使用中,如果在某個(gè)分支上創(chuàng)建了子分支,依然應(yīng)該先完成子分支的合并再將其合并到master中。

6、下面我們演示一個(gè)帶沖突的分支合并,當(dāng)兩個(gè)分支同時(shí)修改某個(gè)文件的相同行時(shí)就會(huì)發(fā)生這個(gè)沖突。
我們會(huì)執(zhí)行如下一組命令:

D:\test\git>echo co > co.txtD:\test\git>git add .D:\test\git>git commit -m "master add co.txt" [master 318f7ac] master add co.txt1 file changed, 1 insertion(+)create mode 100644 co.txtD:\test\git>git checkout -b bc Switched to a new branch 'bc'D:\test\git>echo changeByBc > co.txtD:\test\git>git add .D:\test\git>git commit -m "bc update co.txt in first line" [bc 9f961c6] bc update co.txt in first line1 file changed, 1 insertion(+), 1 deletion(-)D:\test\git>git checkout master Switched to branch 'master'D:\test\git>echo changeByMaster > co.txtD:\test\git>git add .D:\test\git>git commit -m "master update co.txt in first line" [master a4bb91b] master update co.txt in first line1 file changed, 1 insertion(+), 1 deletion(-)

此時(shí)兩個(gè)版本中co.txt的內(nèi)容不一樣,而且是在同一行,我們進(jìn)行一下合并:

git checkout master git merge bc

我們發(fā)現(xiàn)產(chǎn)生沖突了,在co.txt中顯示了沖突的位置,當(dāng)發(fā)生這個(gè)沖突,我們只能在團(tuán)隊(duì)的內(nèi)部進(jìn)行協(xié)調(diào)
解決這個(gè)沖突,這是分支合并時(shí)修改了相同文件,帶來(lái)的必然結(jié)果,只能人工解決或者通過SourceTree之類的工具選擇使用那個(gè)版本。所以分支雖然給我們帶來(lái)了很多便利,但是一定要合理的規(guī)劃好分支的使用策略才能讓分支發(fā)揮出最大的功效,接下來(lái)將介紹基于git-flow的分支管理策略。

轉(zhuǎn)載于:https://my.oschina.net/pmos/blog/821034

總結(jié)

以上是生活随笔為你收集整理的Git的分支命令详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。