一、分支管理定义

几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线,使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作,Git 分支实际上是指向更改快照的指针。

其作用显然是方便开发:企业在开发项目中一般少不了四个分支:

master分支:用于版本的更新,当比较大的功能开发完成或者更新之后会有一次集体的发版,就会将所有的代码都合到master(有的公司也会用release分支发版,原理都是一样);

dev分支:一般是开发测试分支,在项目发版上线之前都会现在dev分支上统一进行测试,确保功能达标没有bug之后再推到master分支;

feature分支:用来做分模块功能开发,建议命名为feature-xxx,模块完成之后,会合并到 dev 分支;

hotfix分支:是用来做线上的紧急 bug 修复的分支,建议命名为 hotfix-xxx。当线上某个版本出现了问题,将检出对应版本的代码,创建 Hotfix 分支,问题修复后,合并回 dev和master  ,这里注意,合并到 master 的时候,一般要打上修复后的版本标签。

二、分支管理的预备知识

1. 分支管理的区域

a. 本地分支:

  • Workspace:工作区,就是vscode中日常开发存放项目代码的地方

  • Index (Stage):暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

  • History:本地仓库,就是安全存放数据的位置,这里面有你提交到所有版本的数据,其中HEAD指向最新放入仓库的版本。

b. 远程分支

  • Remote Directory:远程仓库,托管代码的服务器,即公司的 git仓库 DevOps

一般开发过程中,我们会把本地与远程的分支名设为同名。那怎么区分呢?远程分支名前面有 remote origin 标志!各个区域的关系如下图所示:

2. git文件的四种状态

在从远端下载项目代码时,要求是用命令行 clone代码,而不是鼠标点击下载一个压缩文件,区别在于,clone下来的文件夹里有个.git目录,关于文件版本等的所有信息都在这个目录里面!它也是你能够进行分枝管理版本控制的基础。

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !

  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

三、分支管理策略

一般来说,项目开发的流程为:从代码仓库的master分支下clone下项目的工程代码,然后基于当前master分支新建自己的feature分支进行开发,这个要注意本地和远程分支的关系(不清楚的可以看我上篇文章git入门)。开发完成之后就推到dev测试,通过测试之后就可以merge合到master,合到master分支的操作一般叫 “提mr” , 通过公司的DevOpps流水线操作。如果临时需要新增什么小功能或者修复什么小bug可以 “ 提热更”,也就是从master分支拉个hotfix分支,进行修改然后直接测试完合到master分支。

具体分支管理如下:

1. 查看、新建分支

a. 查看分支

git branch

1.1 git branch 不带参数,查看本地已经存在的分支,并且在当前分支的前面有 * 标记;

1.2 后面加上 -a 参数可以查看所有分支列表,包括本地和远程,远程分支一般会用红色字体标记出来
如果用git branch -a没有显示全部的远程分支,可以通过git fetch将本地远程跟踪分支进行更新,与远程分支保持一致。

1.3 后面加上 -vv 参数可以显示本地所有分支追踪(关联)的远程分支的情况,最后面是最近一次提交commit的注释。

b. 新建分支

git branch 后面加上新建的分支名 (branchname) 即可完成本地分支的建立(分支内容与master一样,因为在新建分支时的当前所处分支为master(*标识) ,也即你是基于master新建的test分支),并且此分支仅存在于本地。

2. 操作分支

包括:切换、删除、关联远程

a. 切换分支

2.1 倘若需要查看本地新建的 test 分支情况,需要切换到本地分支

git checkout (branchname)

2.2 新建切换可以合为一步:新建并切换到新分支,常用!!!

$ git checkout -b test2

2.3 切换到远程分支(常用!!!)

比如说我现在test1分支,想查看远端test2的代码(此时本地会新建并切换一个分支,当然你可以把这个本地的分支名设置成与远端同名)下面我演示设置不同名的情况:

git checkout -b [local name] [origin name]

b. 关联分支

2.4 本地新建的分支,需要关联远程的某个分支才能 push 成功,否则会出现一下报错,关联命令会自动提示,按提示关联远程分支后会在远端新建一个同名的远程分支:

当然你也可以先关联再push:

git remote add origin  远端仓库地址

c. 删除分支

2.5 删除远程分支

git push origin --delete test2

2.5 删除本地分支,注意不能删除当前所在分支,不然会报错,只能删除非当前分支

四、push分支

1. 忽略文件       

有些时候我们不想把某些文件纳入版本控制中,比如依赖包node_modules(很大)、dist文件、临时文件、日志文件yarn-debug.log*等,在主目录下建立".gitignore"文件,此文件有如下规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略;

  2. 可以使用通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等;

  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略;

  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略;

  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。


#为注释
*.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt     #但lib.txt除外
/temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/       #忽略build/目录下的所有文件
doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

2. push命令

git push 命令用于从将本地的分支版本上传到远程并合并:

git push <远程主机名> <本地分支名>:<远程分支名>
如果本地分支名与远程分支名相同,则上述命令可以省略‘ :<远程分支名> ’,如将本地的 master 分支推送到 origin 主机的 master 分支:
git push origin master

如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数,但一般不建议使用。多人协作时,若push失败时应当自行处理完冲突再push,而不是用以下命令。

git push --force origin master

此外,前文中直接使用 git push 进行push,仅适用于本地和远程分支已关联并且同名的情况!

常用的git分支管理方法都在这了相关推荐

  1. 廖雪峰Git教程笔记与总结 -- Git简介、常用命令、分支管理

    本文主要用于记录阅读Git教程 - 廖雪峰的官方网站后的一些心得笔记,并且对git一些常用命令做一个整理总结. 本文要点分为:1.Git简介:2.Git常用命令:3.Git分支管理. 一.Git简介 ...

  2. 【git】(task2)Git分支管理及工具使用

    学习总结 当我们在两个分支中对同一个文件的同一个部分进行了不同的修改,Git就没有办法顺利的合并他们,会在合并的时候产生合并冲突.比如我们在issue102分支和master分支下对issue102. ...

  3. git学习------gt;Git 分支管理最佳实践

    ps:本文转载于 : https://www.ibm.com/developerworks/cn/java/j-lo-git-mange/index.html Git 是目前最流行的源代码管理工具.大 ...

  4. Git学习总结(12)——多人开发 Git 分支管理详解

    1.前言 在上一篇博客中我们主要讲解了Git 远程仓库,相信大家对远程的Git仓库有一定的了解,嘿嘿.在这一篇博客中我们来在大家讲解一下Git 分支管理,这可以说是Git的又一大特点.下面我们就来学习 ...

  5. Git系列教程(四)——git分支管理

    Git 分支管理 一.创建与合并分支 二.删除分支 三.分支冲突 四.分支管理策略 五.Bug分支 六.总结 一.创建与合并分支 什么是分支?有了分支,你创建了一个属于你自己的分支,别人看不到,还继续 ...

  6. 多人开发 Git 分支管理详解

    注,测试机 CentOS 5.5 x86_64,Git 服务器版本:git version 1.8.2.1,客户端版本:git version 1.9.2.msysgit.0.所有软件请到这里下载:h ...

  7. Git分支管理及命名规范

    一.分支分类 Git主分支(保留分支):master .release Git辅助分支(临时分支):dev-*.bugfix-*.release-* 二.分支简介 2.1 master 主分支 对应线 ...

  8. 职场常用问题分析与管理方法

    职场常用问题分析与管理方法 问题分析 5why分析法 5so分析法 职场管理 向上管理 问题分析 5why分析法 5why分析法,其实就是"5问法",也就是对一个问题点连续以5个& ...

  9. Git进阶(五):git 分支管理策略

    文章目录 一.企业级项目分支策略 1.1 主分支 master 1.2 开发分支 develop 1.3 功能分支 feature 1.4 预发布分支 release 1.5 bug 分支 fixbu ...

最新文章

  1. oracle oats 安装,Mentor完整培训教程.pdf
  2. 单独获取ShopEx商品类型中的扩展参数,如配货时间
  3. 负载均衡Ribbon和Feign---SpringCloud
  4. linux下svn的常用代码【转】
  5. NOSQL schema创建原则
  6. 查看python版本命令_Anaconda常用命令小结
  7. SpringBoot 实现接口参数加密解密功能
  8. Android Revolution
  9. YYKit 源码探究
  10. cad打开卡死_AutoCAD程序启动就卡死的修复工具(解决CAD启动卡死不动)V2.00 修正版...
  11. 大学生静态HTML网页源码 我的校园网页设计成品 学校班级网页制作模板 web课程设计 dreamweaver网页作业
  12. This'is wath!
  13. java的jsf是什么_什么是 JSF(Java Server Faces)
  14. 局部二值模式LBP的详细理解
  15. PCB信号完整性及EMC整改措施
  16. 再见了,收费的云笔记,自己搭建的就是好用
  17. Spring Boot 实现接口的各种参数校验
  18. 专题分纲目录 MEM/MBA数学强化
  19. 谷歌插件 XssSniper 扩展介绍 xss检测
  20. 深蹲的26种变化动作(深蹲大全)

热门文章

  1. Python常见库matplotlib之画图文字的中文显示
  2. 探索人工智能音乐的未来:从算法到文化
  3. c语言 long类型取值范围,详解 IOS下int long longlong的取值范围
  4. ubuntu禁用笔记本电脑自带键盘
  5. Alist V3版本 API使用文档 -个人整理
  6. XIM协议的原理及其实现
  7. Geant4.10 多线程 手动数据合并
  8. 成年人的世界,没有什么是容易的
  9. es6字符串扩展 -- 字符串长度补全功能 padStart(), padEnd()
  10. 图片点击放大 松开缩小