分支的理解
我們先說一個簡單的案例,團隊開發一個項目時,A同事想要增加一個新的功能,假設需要一周完成,但是A同時寫了其中的30%,先提交到了主分支,其他人就無法提交自己改的,因為其他人提交上去的話,就被覆蓋了,所以需要等到A同事寫完才能提交上去,但是大家又看不到他的進度,也不能繼續干活,這怎么辦呢?
需要就出現了分支管理的辦法,A同事需要新增功能的話,就創建一個屬於他的分支,比如dev,A同事只需要在dev分支上干活就好了,也不會影響到master主分支,那么所有人都可以正常工作。
分支合並
假設自己的A同事,現在需要增加功能,那么就創建一個dev分支,並將代碼上傳到dev分支上。

如下圖所示,我們創建了dev分支,但是HEAD指針還是指向了master主分支
git checkout命令加上-b參數表示創建並切換分支上。
git checkout -b dev
切換分支
要通過dev分支提交並pull,所以需要切換到dev分支上
git checkout dev
git branch -a # 查看所有分支情況


合並分支
1、創建一個temp.txt文件,通過master提交並push到遠程倉庫


2、切換到dev分支,修改temp.txt內容並提交
-
該項目有一個測試文件 temp.txt,我們修改它的內容,並通過dev分支提交一下。
vim temp.txt cat temp.txt git add temp.txt git commit -m "dev commit"

3、切換回master分支,查看temp.txt文件是否有修改
git checkout master cat temp.txt

大家可以看到我們剛才增加的一行內容不見了,嘿嘿。因為那個提交是在dev分支上,而master分支沒有變化。好了,下面我們來演示一下合並分支。
4、合並分支(快速合並)
大家注意到上面的 Fast-forward 信息,Git告訴我們,這次合並是“快進模式”,也就是直接把master指向dev的當前提交,所以合並速度 非常快。當然,也不是每次合並都能Fast-forward,我們后面會將其他方式的合並。合並完成后,就可以放心地刪除dev分支了。
分支刪除
下面我們來演示一下刪除分支,如下圖:
git branch -d dev # 刪除dev分支
git branch -a # 查看所有分支

小結
大家在實際操作中可以發現在我們創建、合並、刪除分支的速度非常快吧,這和直接在master分支上工作效果是一樣的,但過程更安全,更可靠。下面我們來簡單的總結一下:
-
查看分支 git branch -a
-
創建分支 git branch name
-
切換分支 git checkout name
-
創建並切換 git checkout -b name
-
合並某分支到當前分支 git merge name
-
刪除分支 git branch -d name
分支合並沖突
1)下面我們來演示一下不同分支修改同一個文件產生沖突問題,下面我們來創建一個新的分支,繼續開發新功能:
git checkout -b new1 vim temp.txt cat temp.txt git add temp.txt git commit -m "new1 修改"

2)現在我們將分支切換到master分支上修改temp.txt內容並提交,如下圖:
git checkout master vim temp.txt cat temp.txt git add temp.txt git commit -m "master 修改"

3、快速合並及解決沖突
這種情況下,Git無法執行“快速合並”,只能試圖把各自的修改合並起來,但這種合並就可能會有沖突,如下圖:
-
並且后面的分支顯示變成了 (master|MERGING)

果然沖突了,Git告訴我們temp.txt文件存在沖突,必須手動解決沖突后再提交。下面我們用git status查看一下狀態:

我們發現temp.txt的內容,合並了new1分支和master主分支修改過的信息


所以這個時候就需要團隊的人員進行商討,要保留誰的
-
保留了new1分支的內容,並重新提交了

好了,到這我們的分支合並沖突就講解完成了,下面我們來刪除分支。
最后,我們可以用 git log --graph --pretty=oneline --abbrev-commit 命令,查看一下分支合並。如下圖:

分支提交
(1)新建分支
git branch xxx (xxx填寫你的分支名稱)
(2)查看所有分支
git branch -a
(3)切換到某一分支
git checkout xxx (xxx填寫要切換的分支名稱)

(4)添加修改代碼到緩存(注意最后的"."前面有個空格
git add .
(5)添加提交代碼的備注
git commit -m "xxx" (xxx為本次提交代碼的備注)
(6)提交代碼到指定分支
git push origin xxx (xxx為要提交代碼的分支名稱)

測試結果


