今天来讲讲我使用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分支的一些经验,个人观点,仅供参考。

git如何切换分支_拜托,不要再问我Git分支如何使用相关推荐

  1. bash git 如何切换目录_【git】命令行与本地仓库/远程仓库

    终端里如何复制粘贴 在cmder里 粘贴是鼠标右键 粘贴时shift+Insert 复制是用鼠标选中即自动复制 在Git Bash里 粘贴是鼠标中键 粘贴时shift+Insert 复制是用鼠标选中, ...

  2. 拜托,不要再问我Git如何回滚代码

    Hey git学习篇(5) 这个是Git学习的第5篇内容,今天我们来讲讲Git如何做代码回滚. 代码回滚 不知道大家在平常开发时中没有犯过这样一个错误,就是把IDE的配置或者项目运行的本地配置文件上传 ...

  3. git cherry-pick 把提交到A分支的部分commit 再提交到B分支上

    应用环境: 有一个主分支 master (这个分支只是用来合并其他通过测试的分支,及上线打版本) 另一个分支 dev (开发提交的分支) 当你通过一番挣扎终于搞定一个bug,顺手提交到 git 服务器 ...

  4. git 主干修改合并到分支_这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师"合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的是 ...

  5. git clone 添加代理_用树莓派3搭建私有git代码仓库

    0.出发点 由于项目开发的规模和复杂度越来越大,有时候需要同时多人在不同的嵌入式linux上开发代码,在没有用git管理代码和文档前,很难同步代码和文档的版本,宝贵的代码存储也没有安全感. githu ...

  6. git clone 多个_软件测试知识点 | 测试过程常用的Git命令

    testkuaibao|软件测试自学公众号 点击上图进入软件测试面试题题库,面试题都是有相应的参考答案,希望对小伙伴们有所帮助 前言 目前,在版本控制系统中Git已经被广泛使用,并且很多技术团队也会逐 ...

  7. git 工作流的使用_用塔增压您的git流

    git 工作流的使用 A deep dive into the features and benefits of the Tower git client 深入了解Tower git客户端的功能和优势 ...

  8. git object 很大_这才是真正的Git——Git内部原理

    本文以一个具体例子结合动图介绍了Git的内部原理,包括Git是什么储存我们的代码和变更历史的.更改一个文件时,Git内部是怎么变化的.Git这样实现的好处等等. TL;DR 本文以一个具体例子结合动图 ...

  9. git tag怎么使用_这才是真正的Git——Git内部原理揭秘

    本文作者:lzaneli,腾讯 TEG 前端开发工程师 本文以一个具体例子结合动图介绍了Git的内部原理,包括Git是什么储存我们的代码和变更历史的.更改一个文件时,Git内部是怎么变化的.Git这样 ...

最新文章

  1. 7号团队:团队任务3-每日任务(2018-11-26)
  2. PHP 实现无限分类
  3. 【CV秋季划】模型算法与落地很重要,如何循序渐进地学习好?
  4. SAP系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据
  5. Android开发学习之路-Git的极简教程?
  6. input file的默认value清空与赋值方法
  7. PyTorch Softmax
  8. 别把数据当成万金油,如何用OKR搞垮一个团队?
  9. 希望博客园可以开个邮件列表
  10. java日记 简单Java家庭记账系统
  11. vb.net 教程 5-21 拓展 如何给IE浏览器截图
  12. 太阳系行星运行图-java多媒体实验
  13. Microsoft Visual SourceSafe
  14. 【JSP课程设计】个人信息管理系统(代码保姆级)
  15. Web Components使用(一)
  16. ThinkPHP5数据库操作
  17. android 模拟器使用
  18. 物联网控制APP入门专题(二)---阿里云iot studio移动可视化功能基本操作
  19. windows2022远程桌面连接管理员已结束会话解决方法
  20. sa-sdk-javascript 神策页面加载的时候未进行埋点

热门文章

  1. linux进程退出没有log,Linux下应用进程消失原因分析-Go语言中文社区
  2. 浅谈管理数据平台的一些想法
  3. api商品分享源码_SSM框架高并发和商品秒杀项目高并发秒杀API源码免费分享
  4. oracle values函数,Oracle文本函数简介
  5. MYSQL存储磁盘创建vgcreate_【转】parted创建硬盘分区并创建LVM
  6. All-In-One Code Framework [一站式示例代码库] 【转】
  7. java遍历实体类的属性名称与值
  8. Selenium断言的使用,等待
  9. Android App优化之ANR详解
  10. centos下mysql多实例安装3306、3307实例(2014-10-15)