GIT學習筆記
分支管理(1)
創建與合併分支
- 在前面學的版本回退中,我們知道,每次提交,Git都把他們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git裏,這個分支叫主分支,即
master
分支。HEAD
嚴格來說不是指向提交,而是指向master
,master
纔是指向提交的,所以,HEAD
指向的就是當前分支。
- 一開始的時候,
master
分支是一條線,Git用master
指向最新的提交,再用HEAD
指向master
,就能確定當前分支,以及當前分支的提交點:
- 每次提交,
master
分支都會向前移動一步,這樣,隨着不斷提交,master
分支的線也越來越長
- 當我們創建新的分支,例如
dev
時,Git新建了一個指針dev
,指向master
相同的提交,再把HEAD
指向dev
,就表示當前分支在dev
上:
- 所以說Git創建分支很快,因爲除了增加一個
dev
分支,修改HEAD
指向,工作區的文件沒有任何變化。
- 但是,從現在開始,對工作區的修改和提交就是針對
dev
分支了,比如新提交一次後,dev
指針往前移動一步,而master
指針不變。
- 加入我們在
dev
的工作完成了,就可以吧dev
合併到master
上。Git合併就是直接把master
指向dev
的`當前提交,就完成了合併。
- 所以Git合併分支也很快,就改了下指針,工作區內容不變。
- 合併完分支後,甚至可以刪除
dev
分支。刪除dev
分支就是把dev
指針給刪掉,刪掉後,我們就剩下了一條master
分支。
- 下面開始實戰
- 首先,我們創建
dev
分支,然後切換到dev
分支
$ git checkout -b dev
M readme.txt
切換到一個新分支 'dev'
git checkout
命令加上-b
參數表示創建並切換,相當於下面兩條命令:
$ git branch dev
$ git checkout dev
$ git branch
* dev
master
git branch
會列出所有分支,當前分支前面會標一個*
號。
- 然後,我們就可以在
dev
分支上正常提交,比如對readme.txt
做個修改,加上一行字符,然後提交:
$ git add readme.txt
$ git commit -m "add a new branch"
[dev 8051f1a] add a new branch
1 file changed, 1 insertion(+), 1 deletion(-)
- 現在,
dev
分支的工作完成,我們就可以切換回master
分支:
$ git checkout master
切換到分支 'master'
您的分支與上游分支 'origin/master' 一致。
- 切換回
master
分支後,再查看readme.txt
文件,發現剛纔添加的內容不見了,其實是因爲剛纔的提交在dev
分支上,而master
分支此刻的提交點並沒有變:
- 現在,我們把
dev
分支的工作成果合併到master
分支上:
$ git merge dev
更新 acc1af6..8051f1a
Fast-forward
readme.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
git merge
命令用於合併指定分支到當前分支,合併後,再查看readme.txt
的內容,就可以看到,和dev
分支的最新提交是完全一樣的
- 注意到上面的
Fast-forward
信息,Git告訴我們,這次合併是“快進模式”,也就是直接把master
指向dev
的當前提交,所以合併速度非常快。
- 當然,也不是每次合併都能
Fast-forward
,後面會講到其他方式的合併。
- 合併完成後,就可以放心的刪除
dev
分支了:
$ git branch -d dev
已刪除分支 dev(曾爲 8051f1a)。
- 刪除後,查看
branch
,就只剩下master
分支了:
$ git branch
* master
- 因爲創建、合併、刪除分支非常快,所以Git鼓勵我們使用分支完成某個任務,合併後再刪掉分支,這和直接在
master
分支上工作效果是一樣的,但是過程更加安全。
switch
- 我們注意到切換分支使用的是
git checkout <branch>
,而前面學過的撤銷修改是git checkout -- <file>
同一個命令,有兩種作用。
- 實際上,切換分支這個動作,使用
switch
更科學,因此,最新版本的Git提供了新的git switch
命令來切換分支。
- 創建並切換到新的
dev
分支,可以使用:
$ git switch -c dev
切換到一個新分支 'dev'
$ git switch master
切換到分支 'master'
您的分支領先 'origin/master' 共 1 個提交。
(使用 "git push" 來發布您的本地提交)
- 使用新的
git switch
命令,比git checkout
要更容易理解。