在Git中,假設寫了第一個版本的代碼VI,然后下面又寫了第二個版本的代碼V2,那么V2保留的內容是相對於V1新加的內容,他們之間的關系是V2指向V1。這一條線叫做主干:master
此時在V2的基礎上,想新加一個功能G1,那么可以在V2的基礎上添加一個分支,這個分支G1是創建了一個新環境來寫的。再比如說此時想添加另外一個新功能G2,我們同樣創建一個分支,這個分支用來寫G2。G1和G2是完全不交涉的。最后如果我們確定G1和G2完成之后,我們只需要將他們合並到主干master上即可。
- 現在我們有這樣的一個版本的代碼:
- 查看狀態:
git log
- 查看當前所處的分支,我們可以看見現在所處的分支是主干master。
git branch
- 現在我們創建一個新分支,用於開發功能G1。然后我們查看分支,發現有兩個分支:一個是當前所處主干master,一個就是剛剛創建的分支G1。
git branch G1 # 用於創建新分支 git branch # 查看當前所處分支
-
我們切換到分支G1去,然后查看分支,發現現在我們處在G1分支中。
git checkout G1
- 現在我們開發功能G1,注意我們現在處於分支G1中。
上圖開發完成之后,我們查看一下狀態,發現文件被修改了,接着添加到git管理,提交到版本控制,最后查看狀態。所以現在我們是在G1這個新的環境中修改代碼。
git status git add . git commit -m 'G1' git log
- 現在我們切換回到主干master中,所以現在我們處在master中,然后查看剛剛修改的文件,發現剛剛修改的文件不見了,這是因為我們是在G1中修改的,而G1是單獨的一個環境,並且沒有合並到master中。
git checkout master
- 現在我們創建另外一個分支G2,開發新功能G2。注意此時我們已經切換到主干master中了。
git branch G2 git checkout G2 ...開發中 git add . git commit -m 'G2'
切換到G2之后,我們開發完G2,然后將他提交到版本控制中,並且查看他的狀態,我們發現里面沒有G1,只有G2和V2還有V1,這也再次說明G1和G2是單獨的一個環境,沒有任何交涉,他們都是通過指針指向V2。
- 現在我們覺得G1開發成熟了,此時我們將G1合並到master上。首先我們要切換到master中,這樣我們才能合並。
git checkout master
然后我們查看一下狀態,只有V1,V2
接着我們合並G1到master中
git merge G1
查看狀態,相對於沒有合並的,現在的主干上多了G1
- 如果確認G1沒有問題之后,我們就可以將分支G1刪掉
git branch -d G1
- 若G2也開發完畢,這是我們也能夠將G2合並到master中了。依舊切換到master上,然后合並G2
git merge G2
此時我們發現出現了一個報錯,這說明合並文件出現了沖突。因為我們之前合並過G1,而G1和G2都屬於分支,當兩個分支都合並到master中時,Git不知道如何將他們合並到一起,所以會產生沖突。
為什么合並G1不會產生沖突了?這是因為合並G1時,沒有其他分支在他之前合並過。
我們查看代碼文件:
此時,我們手動將他們合並
最后我們執行版本控制,將他們提交即可