創建與合併分支
在版本回退裏,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。Git裏,這個分支叫主分支,即master
分支。HEAD
嚴格來說不是指向提交,而是指向master
,master纔是指向提交的,所以,HEAD指向的就是當前分支。
每次提交,master
分支都會向前移動一步,這樣,隨着你不斷提交,master
分支的線也越來越長。
創建新的分支,例如dev
時,Git新建了一個指針叫dev,指向master相同的提交,再把HEAD
指向dev
,就表示當前分支在dev
上。
創建dev分支
命令 git branch dev
切換到dev分支
命令git checkout dev
創建dev分支並切換到dev分支。
命令 git checkout -b dev
!!注意:避免混淆
撤銷修改是git checkout -- <file>
查看當前分支
git branch
命令會列出所有分支,當前分支前面會標一個*號。
命令git branch
新提交一次後,dev
指針往前移動一步,而master指針不變
。
比如修改了hello.txt文件並提交
命令 vim hello.txt
命令 git add hello.txt
命令 git commit -m "branch test"
如我們在dev上的工作完成了,就可以把dev合併到master上。Git怎麼合併呢?最簡單的方法,就是直接把master
指向dev
的當前提交,就完成了合併。
dev分支的工作完成,我們就可以切換回master分支
命令 git checkout master
查看hello.txt文件內容
命令 cat hello.txt
發現添加的內容並沒有。
把dev分支的工作成果合併到master分支上
命令git merge dev
注意到上面的Fast-forward
信息,Git告訴我們,這次合併是“快進模式”,也就是直接把master指向dev的當前提交,所以合併速度非常快。
再次查看hello.txt文件內容
命令:cat hello.txt
可以看到,和dev分支的最新提交是完全一樣的。
合併完分支後,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉後,我們就剩下了一條master分支。
合併完成後,刪除dev分支
命令 git branch -d dev
查看當前分支
命令: git branch
發現只剩下master分支了
解決衝突
創建新的分支feature1並切換到feature1分支
命令 git checkout -b feature1
修改hello.txt文件內容
命令 vim hello.txt
在featurel分支上提交
命令git add hello.txt
命令git commit -m "AND simple"
切換到master分支
命令git checkout master
在master分支上把hello.txt文件
命令 vim hello.txt
在master提交修改的hello.txt文件
命令git add hello.txt
命令git commit -m "& simple"
此時,master分支和feature1分支各自都分別有新的提交。關係如圖
這種情況下,Git無法執行“快速合併”,只能試圖把各自的修改合併起來,但這種合併就可能會有衝突.
嘗試合併
命令git merge feature1
發現出現衝突
查看項目狀態
命令 git status
查看hello.txt文件內容
命令 cat hello.txt
Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容
修改hello.txt文件
命令vim hello.txt
提交
命令git add rhello.txt
命令git commit -m "conflict fixed"
此時,master分支和feature1分支 關係如圖
查看分支合併情況
命令git log --graph --pretty=oneline --abbrev-commit
用git log --graph
命令可以看到分支合併圖
刪除feature1分支
命令:git branch -d feature1
finishing
當Git無法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。
解決衝突就是把Git合併失敗的文件手動編輯爲我們希望的內容,再提交。