git分支管理
備註:
本文轉載參考於廖雪峰老師的部落格Git教程。依照其部落格進行學習和記錄,感謝其無私分享,也歡迎各位查看原文。
知識點
-
分支可以並行的管理版本,協同合作編寫程式碼,在分支上完成工作,然後合併分支。
-
查看分支和當前分支:
git branch
-
創建分支
git branch <name>
-
切換分支
git checkout <name>
-
創建並切換分支
git checkout -b <name>
-
合併指定分支到當前分支,
git merge <name>
-
刪除分支
git branch -d <name>
分支管理
分支類似於平行的多個支線。
分支的作用:比如多人協作開發中,你開發的功能需要兩周完成,第一周還沒寫完,如果提交,由於程式碼不完整,提交可能會導致別人不能幹活,但是如果等程式碼全部寫完再提交,又有丟失的風險。
藉助分支,你可以創建一個屬於自己的分支,多個人各自在自己的分支上正常工作,互不影響,等到開發完成後,在一次性合併到原來的分支上,保證了安全、高效、協同、互補影響。
Git分支的創建、切換、刪除非常快,和文件多少無關。
創建與合併分支
版本回退中,Git的版本管理是將每次提交串成一條時間出現,這條時間線就是一個分支。
目前創建的Git倉庫只有一個分支——主分支,即master
分支,
HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。
開始,master
分支是一條線,Git用master
指向最新的提交,再用HEAD
指向master
,就能確定當前分支和當前分支的提交點。
每次提交,master
分支都會向前移動一步,隨著不斷的提交,master分支的線也越來越長。
當我們創建新的分支,比如dev
分支,Git新建一個指針叫dev
,指向master
相同的提交,再把HEAD
指向dev
,就表示當前分支在dev
上。
Git創建分支很快,因為Git只增加一個dev
指針,同時修改HEAD
的指向,工作區的文件都沒有任何變化。
現在對工作區的修改和提交就針對dev
分支,比如新提交之後,dev
指針往前移動,而master
指針不變
當我們在dev
上的工作完成了,就可以把dev
合併到master
上。
Git的合併很簡單,就是直接把master
指向dev
的當前提交,這就完成了合併。
Git合併分支也很快,僅僅是改改指針,工作區內容不變。
合併完分之後,如果刪除dev分支只要把dev指針刪除就可以
只剩下一條master分支
創建分支和合併分支。
- 創建
dev
分支,並切換到dev
分支
$ git checkout -b dev
切換到一個新分支 'dev'
git checkout -b xx
表示創建分支並切換。
- 分步驟創建並切換分支
dev2
。如下
$ git branch dev2
$ git checkout dev2
切換到分支 'dev2'
git branch
查看當前分支
$ git branch
dev
* dev2
master
git branch
列出所有分支,當前分支前面有一個*號。
- 現在可以在dev2分支上正常提交。如修改
readme.txt
文件。然後查看Git狀態
$ git status
位於分支 dev2
尚未暫存以備提交的變更:
(使用 "git add <文件>..." 更新要提交的內容)
(使用 "git checkout -- <文件>..." 丟棄工作區的改動)
修改: readme.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
提示當前分支位於dev2
上,並且工作區readme.txt
修改
- 分支提交
$ git add readme.txt
$ git commit -m"modify readme.txt at branch"
[dev2 03d07d2] modify readme.txt at branch
1 file changed, 1 insertion(+)
如上,在當前分支dev2
上完成了提交。
- 在
dev2
分支上提交完,切回master
分支:
$ git checkout master
切換到分支 'master'
您的分支與上游分支 'origin/master' 一致。
liu@liu-virtual-machine:~/gitTest$ cat readme.txt
`this is a test that I learn and use git version control system
this is a beginning
wofaidognyixie dognxi
查看可以看到,readme.txt
文件保持和修改前的一致。
- 切換到
dev2
分支,可以看到dev2
分支上內容為之前最新修改內容
$ git checkout dev2
切換到分支 'dev2'
$ cat readme.txt
`this is a test that I learn and use git version control system
this is a beginning
wofaidognyixie dognxi
create two new branch
- 將
dev2
分支內容合併到master
分支(當前分支為master
)
$ git merge dev2
更新 036ced2..03d07d2
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
此時查看readme.txt
內容,已經和dev2
一樣
git merge
命令用於合併指定分支到當前分支。
注意,上面合併時提示
Fast-forward
,Git指示本次合併是「快進模式」,即把master
指向dev2
的當前提交,所以速度很快。
- 刪除
dev2
分支,合併完成後就可以放心的刪除dev2
分支了。
$ git branch -d dev2
已刪除分支 dev2(曾為 03d07d2)。
$ git branch
dev
* master
刪除後,查看branch
,dev2
分支已經沒有了。
Git創建、合併和刪除分支都非常快,所以Git鼓勵使用分支完成某個任務,合併後再刪除分支,效率高並且安全。