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分支和head和提交

每次提交,master分支都會向前移動一步,隨著不斷的提交,master分支的線也越來越長。

當我們創建新的分支,比如dev分支,Git新建一個指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上。

新dev分支和head和提交

Git創建分支很快,因為Git只增加一個dev指針,同時修改HEAD的指向,工作區的文件都沒有任何變化。

現在對工作區的修改和提交就針對dev分支,比如新提交之後,dev指針往前移動,而master指針不變

新dev分支和head和提交2

當我們在dev上的工作完成了,就可以把dev合併到master上。

Git的合併很簡單,就是直接把master指向dev的當前提交,這就完成了合併。

dev分支和master合併

Git合併分支也很快,僅僅是改改指針,工作區內容不變。

合併完分之後,如果刪除dev分支只要把dev指針刪除就可以

只剩下一條master分支

分支和master合併後刪除dev分支

創建分支和合併分支。

  • 創建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

刪除後,查看branchdev2分支已經沒有了。

Git創建、合併和刪除分支都非常快,所以Git鼓勵使用分支完成某個任務,合併後再刪除分支,效率高並且安全。