????在Git中的每次提交,Git都會(huì)把它們串成一條時(shí)間線(xiàn),這條時(shí)間線(xiàn)就是一個(gè)分支,但是到目前為止,我們只有一條分支master分支,也就是我們的主分支,在實(shí)際的項(xiàng)目開(kāi)發(fā)過(guò)程中,我們并不會(huì)在master分支上進(jìn)行開(kāi)發(fā),而是會(huì)新創(chuàng)建一個(gè)分支,然后在這個(gè)新創(chuàng)建的分支上開(kāi)發(fā)測(cè)試,全部沒(méi)有問(wèn)題后,再合并到主分支上。比如我要開(kāi)發(fā)一個(gè)項(xiàng)目中的一個(gè)功能,我就要新創(chuàng)建一個(gè)屬于我的分支,這個(gè)分支會(huì)拷貝主分支的一個(gè)完全的副本,我在這個(gè)分支上進(jìn)行的各種操作,不會(huì)對(duì)其他人的開(kāi)發(fā)造成影響,當(dāng)我的功能開(kāi)發(fā)測(cè)試完成后,就把我的分支合并到master主分支上。
????在我們以前看到的,git log中,HEAD嚴(yán)格來(lái)說(shuō)不是指向提交,而是指向master,master才是指向提交的,所以HEAD指向的就是當(dāng)前的分支。
????使用Git進(jìn)行團(tuán)隊(duì)開(kāi)發(fā)的過(guò)程中,Git是鼓勵(lì)大量使用分支的:
????查看分支:git branch,*的意思是當(dāng)前停留在哪個(gè)分支上。

git branch.jpg
????創(chuàng)建分支:
git branch <name>,可以看到目前有兩個(gè)分支,并且停留在master分支上。
git branch <name>.jpg
????切換分支:
git checkout <name>,可以看到目前切換到test1分支上。
git checkout.jpg
????創(chuàng)建+切換分支:
git checkout -b <name>,可以看到目前切換到test2分支上。
git checkout -b.jpg
????刪除分支:
git branch -D <name>,但是無(wú)法刪除當(dāng)前所在的分支,要是我們需要?jiǎng)h除test2分支,需要先切換到其他分支,然后刪除。
git branch -D.jpg
????使用
git log可以看出,正如我們之前所說(shuō)的,HEAD指向master,master是指向提交的,HEAD指向的就是當(dāng)前的分支。
git log.jpg
????合并某分支到當(dāng)前分支:
git merge <name>,接下來(lái)我們切換到test1分支,并添加一行我在test1分支里做的修改,執(zhí)行git add和git commit命令,接下來(lái)我們切換回master分支,打開(kāi)test.txt文件,發(fā)現(xiàn),里面并沒(méi)有內(nèi)容改動(dòng),因?yàn)槲覀冎八龅牟僮髦皇窃趖est1分支進(jìn)行的。
git checkout test1.jpg
????然后我們執(zhí)行合并命令,再次打開(kāi)test.txt文件,發(fā)現(xiàn)里面已經(jīng)多了一行我們剛在test1分支下添加的內(nèi)容。

git merge.jpg
????但是有時(shí)候Git無(wú)法自動(dòng)合并分支,比如你和你的同事同事修改了同一行代碼,那這個(gè)時(shí)候就需要你和你的同事認(rèn)真打一架了,首先必須解決沖突,解決沖突后再提交,合并完成。另外可以使用
git log --graph命令看到分支合并圖。下面我們分別在master分支添加一行信息111,執(zhí)行add和commit后,再切換到test1分支下同一行添加信息222,并執(zhí)行add和commit后,再切換回master分支合并,發(fā)現(xiàn)merge沖突。
git merge沖突.jpg
打開(kāi)test.txt文件后,發(fā)現(xiàn)以下信息

test.txt.jpg
????所以我們需要解決沖突,將多余的4行全部刪除,改成333并保存。然后提交,發(fā)現(xiàn)成功。

解決沖突.jpg