今天来讲讲我使用Git分支的一些经验,记录一下,希望对大家有帮助。
阐述
在平常开发中,一般都会对应三种环境,本地环境、测试环境、线上环境。开发的基本流程都是先在本地环境开发好,再把代码发布到测试环境测试,最后再发布到线上环境。
对于代码,我们使用Git分支进行管理,一般而言会对应两个分支,master和dev。
master分支主要用于线上发布使用,dev分支用于平常的开发和测试。除此之外,我们也可以创建多个分支,比如给某次的迭代开发创建一个分支、针对一次代码优化创建一个分支,或者针对一次Bug修复,我们可以新建个分支。
Git的分支创建速度非常快,它不像svn等集中式版本控制系统,每次创建需要cp代码,而是直接改变指针指向即可。比如当前指针指向master,我们基于master最近一次的提交创建个dev分支出来,其实就是创建了个指针指向dev分支而已。在切换和合并分支的时候,也都是改变指针指向,速度非常快。
总之,Git提倡多使用分支,我们不需要吝啬使用它。
下面就来讲讲分支相关命令以及我使用分支的一些经验。
创建分支
创建分支: git branch 分支名
切换分支: git checkout 分支名
查看所有分支: git brach -a
分支合并: git merge 分支名 (把分支合并到当前分支)
删除分支
随着需求的迭代,仓库中创建的分支可能会越来越多,这个时候我们需要删除一些已经merge的分支,Git提倡分支用完即删除的做法。
以下是有关删除分支的命令。
首先使用git branch -a查看当前所有分支。
删除本地分支:git branch -d 分支1[,分支名2,分支名3...]
删除远程分支: git push origin --delete 分支名1[,分支命2,分支名...]
缓存分支修改
有时候,我们可能会同时在几个分支上进行开发,在切换分支的时,如果当前分支有修改,这个时候功能还没有全部开发完成,你并不想马上提交到版本库的话,
我们可以使用Git提供的缓存修改的命令,把这部分修改暂时缓存起来,切换回这个分支的时候,再把它取出来。
缓存修改命令:git stash
【注:这个命令会把提交到暂存区,就是使用git add提交之后的代码缓存起来,对未经Git管控的文件修改并不做缓存】
从缓存中恢复修改并删除缓存内容: git stash pop
查看缓存列表:git stash list
最小修改提交
之前碰到过一个问题,在一次开发中,我和一个同学分别负责项目不同的模块实现,我们都基于master分支创建出一个新分支供于自己提交,也就是说在各自的分支上,我们都看不到对方的修改。
本来两个分支开发的功能基本互不影响,但期间我修改到了框架的一个公共方法,这个同学也需要调用这个方法,而且他的代码需要先上线,这个时候怎么办呢?
一种方式是在确认我自己代码上线无影响的情况下,和这个同学的代码一起上线,但这样不保险,并不能保证以后出现这种情况都能一起上线。
另外一种方式,可以用Git提供的最小修改提交命令git cherry-pick。把我修改公共方法这块给单独提交一个commit,通过git cherry-pick命令给合并到这个同学的分支上,然后让他发布上线就好。
命令:git cherry-pick commit-id
踩过的坑
我开始接触Git时,分支会不小心从dev分支上创建出来,在合并到master分支后,发现有很多不属于自己修改的文件,一些文件并不能一起合并。造成的后果就是,必须要回滚代码。
dev分支是供测试环境发布的分支,大家平时都在上面干活,合并代码比较随意,跟master分支版本的代码差异会比较大。创建分支时应该基于master最新提交上,即当前分支需要切换到master,执行git pull命令,再使用git branch创建分支。
一个比较好的习惯是,在合并到master分支时,对比自己分支和master分支的差异,确认是否属于自己提交的修改。我们可以借助于IDE提供的分支对比功能,可以非常直观的看出差异。
在不确认自己的分支到底是从哪个分支上切换出来的时,我们可以用`git reflog show 分支名`命令,来查看这个分支的演变历史。它可以告诉你是分支从哪里创建出来的,还有合并和提交的记录,对追踪问题特别有帮助。
有关冲突解决
在合并分支时,可能会碰见让人抓狂的文件冲突,这个时候Git会提示,必须要解决冲突才能进行合并。引起冲突的原因一般都是两个分支同时修改了某个文件相同位置的内容,解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
以上,就是我使用Git分支的一些经验,个人观点,仅供参考。