1.分支合並
1.1 常用命令
git branch //查看分支 git branch test //創建一個名為test的分支 git checkout test //從當前分支切換到test分支 git checkout –b test //創建並切換到test分支 git merge test //合並test到當前分支 git branch –D test //強制刪除test分支
1.2 分支合並示例
假如,我們test分支主要工作是創建2.txt,並上傳2.txt.
如下圖所示,可以看到,我們已經切換到了test分支:

然后創建一個2.txt,並git add 2.txt:

然后git commit 2.txt -m "提交2.txt":

此時我們提交的只是在test分支,在master主分支上,其實並沒有,所以我們還需要將test分支合並到master主分支上.
然后git checkout master,切換分支:

如上圖所示,由於2.txt是test分支的,所以當切換到master分支后,就會消失.
然后輸入git merge test,將test合並到分支:

如下圖所示,此時就可以看到2.txt已經有了,輸入”git log”,也可以看到2.txt是test分支上傳的:

然后將上面的commit值復制下來,輸入git show 8e26b96895a75d971a066da8a822fb7bce1bd874,就可以看到具體提交的內容了.
由於test分支的工作目的已經完成了,所以就可以通過git branch –d test來刪除test分支了.
2.分支合並之沖突
之前我們test工作是完成了2.txt創建以及上傳工作,如下圖所示:

假如,我們現在共同對已有的2.txt進行修改,那么分支合並的時候,必然會造成沖突.所以我們需要解決沖突.
首先git checkout -b test1,進入test1分支,然后修改2.txt,然后再進行add、commit提交:

然后再次git checkout master,進入主分支,可以看到2.txt已經還原為0kb(沒有內容):

然后我們此時,在master主分支上修改2.txt,用來模擬其它同事提交:

進行add,commit提交:

接下來我們便開始合並,進行git merge test1,就會發現2.txt合並沖突:

此時再次打開2.txt,可以看到主分支和test1分支分別加了什么:

也可以右擊TortoiseGit(小烏龜),來解決沖突:

最后內容改為:

然后再次add、commit,就解決沖突了,如下圖所示,可以看到當前狀態MERGING已經消失了,說明合並成功了:

3.分支管理工作現場
大部分項目管理中,master主分支都是用來發布版本,存的代碼都是很穩定的.
而子分支主要是用來開發人員干活的,比如添加功能、升級功能等.完成后就會提交合並到主分支上.
場景1:
假如,當前正在實現的A功能,但是還未提交,但是發布版本的代碼中,出現了一個bug,需要臨時修復,但是此時的A功能還未寫完,所以就需要保存A功能所在的代碼現場才行.等修復bug完成后,再恢復A功能工作現場,繼續實現A功能.
場景2:
假如,當前正在實現的A功能周期長,但是在此期間,其他開發人員已經更新了很多功能並合並到主分支上了,此時我們A功能才完成,所以需要保存A功能所在的代碼現場,然后從主分支同步代碼下來,最后再恢復A功能工作現場,然后提交代碼,並檢查合並代碼沖突.
3.1 要用到的相關命令
git stash //存儲當前工作現場 git stash list //查看git stash列表 git stash apply stash@{X} //從git stash列表中恢復指定的存儲列, 比如git stash apply stash@{1},把版本號為stash@{1}的備份取出(而0對應最新版本),不會刪除對應的stash git stash drop stash@{X} //從git stash列表中刪除某列,比如git stash drop stash@{1} git stash pop //恢復最近一次stash存儲的列內容, 獲取之后會刪除棧中對應的stash。 git merge master //從master合並代碼到本分支上. git branch –D test1 //刪除test1分支,並會丟棄test1上的未合並過的代碼,比如A功能不需要實現了.
3.2 模擬場景1(funA分支:實現A功能哪個、bug分支:用來解決bug問題)
首先通過"git checkout -b funcA"進入funcA分支, 向2.txt添加"實現功能A"字段來模擬實現功能A,:

此時發現了之前寫的2.txt有一個bug,首先輸入git stash,保存功能A當前現場:

如上圖所示,git stash后,再次git status,可以看到2.txt已經復原了,而修改的內容則保存在了stash表中.
然后切換到bug分支, 向2.txt添加"解決bug問題"字段來模擬解決bug場景,然后提交文件:

然后切換到master,通過git merge bug來合並剛剛解決的bug問題,然后通過git log,查看剛剛合並的版本號:

也可以通過git log --oneline查看精簡版log:

解決完bug后進入funcA分支,並刪除bug分支:

然后輸入git merge master,將剛剛修改的bug代碼合並到當前分支里:

最后輸入git stash pop,把功能A工作現場恢復到2.txt,由於2.txt之前解決過bug,所以還要解決合並沖突.
也可以通過右擊TortoiseGit(小烏龜),來解決沖突:

修改如下:

然后再次輸入以下命令進行文件提交和同步,即可完成:
$ git add 2.txt
$ git commit -m "合並master后,並升級功能A"
$ git checkout master //切換到master
$ git merge funcA //然后合並funcA分支到master中
$ git branch -D funcA //功能A完成,刪除funcA分支
