GitFlow工作流 GitFlow是一套基于git的工作流程,这个工作流程围绕着项目发布定义了一个严格的如何建立分支的模型。GitFlow规定了如何建立、合并分支,如何发布,如何维护历史版本等工作流程。简单说就是每一个功能特性的开发是在分支上开发,而不是在主干开发,分支开发完毕后再合并到主干上。 Gitflow常见分支开发主分支:master分支master分支的代码是可以直接部署到生成环境的,为了保持稳定性一般不会直接在这个分支上修改代码,都是通过其他分支合并过来的。开发主分支:develop分支develop分支是主开发分支,包含所有要发布到下一个release的代码,主要是由feature分支合并过来的。临时分支:feature分支feature分支主要是用来开发一个新特性,一旦开发完成会合入develop分支,feature分支也随即删除掉。临时分支:release分支当需要一个发布一个新release版本时,会基于develop分支创建一个release分支,经过测试人员充分测试后再合入master分支和develop分支。临时分支:hotfix分支当在生成环境发现新的Bug时候,如果需要紧急修复,会创建一个hotfix分支,充分测试后合入master和develop分支,随后删除该分支。 分支命名规范 团队内部可以约定每个分支的命名样式,这里举个例子,大家可以参考:feature分支:以feature开头,如featureorderrelease分支:以release开头,如releasev1。0hotfix分支:以hotfix开头,如hotfix20210117tag标记:如果是release分支合并,则以release开头,如果是hotfix分支合并,则以hotfix开头。master与develop分支 原则上master分支上所有的commit都应该打上Tag,因为一般情况下master不存在直接commit。devlop分支是基于master分支创建的,与master分支一样都是主分支,不会被删除。develop从master拉出来之后会独立发展,不会与master直接产生联系。 feature分支 通常一个独立的特性都会基于develop拉出一个feature分支,feature分支之间没有任何交互,互不影响。feature分支一旦开发完成后会立马合入develop分支(采用mergerequest或者pullrequest),feature分支的生命周期也随之结束。 release分支 通常一个迭代上线会拉一个release分支,开发人员开发完毕所有的代码都已合入develop分支,这时候会基于develop分支拉出一个release分支,测试人员基于该分支进行测试。 hotfix分支 hotfix分支基于master分支创建,开发完后需要同时回合到master和develop分支,同时在master上打一个tag。 常用命令新建代码库在当前目录新建一个Git代码库gitinit新建一个目录,将其初始化为Git代码库gitinit〔projectname〕下载一个项目和它的整个代码历史gitclone〔url〕配置信息 Git的设置文件为。gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)显示当前的Git配置gitconfiglist编辑Git配置文件gitconfige〔global〕设置提交代码时的用户信息gitconfig〔global〕user。name〔name〕gitconfig〔global〕user。email〔emailaddress〕颜色设置gitconfigglobalcolor。uitruegitstatus等命令自动着色gitconfigglobalcolor。statusautogitconfigglobalcolor。diffautogitconfigglobalcolor。branchautogitconfigglobalcolor。interactiveautogitconfigglobalunsethttp。proxyremoveproxyconfigurationongit增加删除文件添加指定文件到暂存区gitadd〔file〕〔dir〕。。。删除工作区文件,并且将这次删除放入暂存区gitrm〔file1〕〔file2〕。。。代码提交提交暂存区到仓库区gitcommitm〔message〕提交暂存区的指定文件到仓库区gitcommit〔file1〕〔file2〕。。。m〔message〕分支列出所有本地分支和远程分支gitbrancha新建一个分支,但依然停留在当前分支gitbranch〔branchname〕新建一个分支,并切换到该分支gitcheckoutb〔branch〕从远程分支develop创建新本地分支devel并检出gitcheckoutbdevelorigindevelop切换到指定分支,并更新工作区gitcheckout〔branchname〕合并指定分支到当前分支gitmerge〔branch〕选择一个commit,合并进当前分支gitcherrypick〔commit〕删除分支gitbranchd〔branchname〕删除远程分支gitpushorigindelete〔branchname〕标签列出所有taggittag新建一个tag在当前commitgittag〔tag〕删除本地taggittagd〔tag〕删除远程taggitpushorigin:refstags〔tagName〕查看tag信息gitshow〔tag〕提交指定taggitpush〔remote〕〔tag〕提交所有taggitpush〔remote〕tags查看信息显示有变更的文件gitstatus显示当前分支的版本历史gitlog显示commit历史,以及每次commit发生变更的文件gitlogstat搜索提交历史,根据关键词gitlogS〔keyword〕显示某个commit之后的所有变动,每个commit占据一行gitlog〔tag〕HEADprettyformat:s显示某个commit之后的所有变动,其提交说明必须符合搜索条件gitlog〔tag〕HEADgrepfeature显示某个文件的版本历史,包括文件改名gitlogfollow〔file〕显示指定文件相关的每一次diffgitlogp〔file〕显示过去5次提交gitlog5prettyoneline显示所有提交过的用户,按提交次数排序gitshortlogsn显示指定文件是什么人在什么时间修改过gitblame〔file〕显示暂存区和工作区的差异gitdiff显示暂存区和上一个commit的差异gitdiffcached〔file〕显示工作区与当前分支最新commit之间的差异gitdiffHEAD显示两次提交之间的差异gitdiff〔firstbranch〕。。。〔secondbranch〕显示今天你写了多少行代码gitdiffshortstat{0dayago}显示某次提交的元数据和内容变化gitshow〔commit〕显示某次提交发生变化的文件gitshownameonly〔commit〕显示某次提交时,某个文件的内容gitshow〔commit〕:〔filename〕显示当前分支的最近几次提交gitreflog远程同步下载远程仓库的所有变动gitfetch〔remote〕显示所有远程仓库gitremotev显示某个远程仓库的信息gitremoteshow〔remote〕增加一个新的远程仓库,并命名gitremoteadd〔shortname〕〔url〕取回远程仓库的变化,并与本地分支合并gitpull〔remote〕〔branch〕上传本地指定分支到远程仓库gitpush〔remote〕〔branch〕撤销重置暂存区的指定文件,与上一次commit保持一致,但工作区不变gitreset〔file〕重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变gitreset〔commit〕重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致gitresethard〔commit〕后者的所有变化都将被前者抵消,并且应用到当前分支gitrevert〔commit〕