并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
- master分支是主分支,因此要时刻与远程同步;
- dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
- bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!
首先,我们创建
dev
分支,然后切换到
dev
分支:
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout
命令加上
-b
参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
然后,用
git branch
命令查看当前分支:
$ git branch
* dev
master
git branch
命令会列出所有分支,当前分支前面会标一个
*
号。
然后,我们就可以在
dev
分支上正常提交,比如对readme.txt做个修改,加上一行:
Creating a
new
branch is quick.
然后提交:
$ git add readme.txt
$ git commit -m "branch test"
[dev fec145a] branch test
1 file changed, 1 insertion(+)
现在,
dev
分支的工作完成,我们就可以切换回
master
分支:
$ git checkout master
Switched to branch 'master'
切换回
master
分支后,再查看工作区的readme.txt文件,刚才添加的内容不见了!因为那个提交是在
dev
分支上,而
master
分支此刻的提交点并没有变。
现在,我们把
dev
分支的工作成果合并到
master
分支上:
$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
git merge
命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和
dev
分支的最新提交是完全一样的。
注意到上面的
Fast-forward
信息,Git告诉我们,这次合并是“快进模式”,也就是直接把
master
指针指向
dev
的当前提交,所以合并速度非常快。
当然,也不是每次合并都能
Fast-forward
,我们后面会讲其他方式的合并。
合并完成后,就可以放心地删除
dev
分支了:
$ git branch -d dev
Deleted branch dev (was fec145a).
删除后,查看
branch
,就只剩下
master
分支了:
$ git branch
* master
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在
master
分支上工作效果是一样的,但过程更安全。
小结:
Git鼓励大量使用分支:
查看分支:
git branch
创建分支:
git branch <name>
切换分支:
git checkout <name>
创建+切换分支:
git checkout -b <name>
合并某分支到当前分支:
git merge <name>
合并分支时,加上
--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而
fast forward
合并就看不出来曾经做过合并。
例如:
$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
删除分支:
git branch -d <name>
如果要丢弃一个没有被合并过的分支,可以通过
git branch -D <name>
强行删除。