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
命令查看当前分支:
$ 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
要更容易理解。