Git学习笔记(6)——Bug和Feature分支
本文主要记录了通过Git来调试Bug和添加新的功能,也就是Bug分支和Feature分支,以及分支的推送。
Bug分支
通过Git,我们可以为每个Bug建立一个分支,Bug修复后,合并分支,然后将临时分支删除。
当有Bug的时候,想创建一个分支bug-101
来修复它,如果,当前正在dev
上进行的工作还没有完成,不能提交,而且,我们必须马上解决bug,这时,我们借助Git提供的stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。
ubuntu@myUbuntu:~/joe/learngit$ git branch
dev
* master
ubuntu@myUbuntu:~/joe/learngit$
git checkout dev
//我们正在dev上面修改文件
切换到分支 'dev'
ubuntu@myUbuntu:~/joe/learngit$ ls
abc.c readme.txt
ubuntu@myUbuntu:~/joe/learngit$ vi abc.c
ubuntu@myUbuntu:~/joe/learngit$ git status
位于分支 dev
尚未暂存以备提交的变更:
(使用 "git add <file>..." 更新要提交的内容)
(使用 "git checkout -- <file>..." 丢弃工作区的改动) 修改: abc.c 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
ubuntu@myUbuntu:~/joe/learngit$
git stash
//要修改bug了,我们先存储当前的分支
Saved working directory and index state WIP on dev: b961f85 dev
HEAD 现在位于 b961f85 dev
ubuntu@myUbuntu:~/joe/learngit$
git checkout master
//回到主分支建立bug-101分支
切换到分支 'master'
您的分支与上游分支 'origin/master' 一致。
ubuntu@myUbuntu:~/joe/learngit$
git checkout -b bug-
切换到一个新分支 'bug-101'
ubuntu@myUbuntu:~/joe/learngit$
vi abc.c
//修改bug,然后提交完工
ubuntu@myUbuntu:~/joe/learngit$ cat abc.c
bug is ok
ubuntu@myUbuntu:~/joe/learngit$ git add abc.c
ubuntu@myUbuntu:~/joe/learngit$
git commit -m "fix bug-101"
[bug- 5ad5f95] fix bug-
file changed, insertion(+), deletion(-)
ubuntu@myUbuntu:~/joe/learngit$
git checkout master
//回到主分支
切换到分支 'master'
您的分支与上游分支 'origin/master' 一致。
//以非快速模式合并分支
ubuntu@myUbuntu:~/joe/learngit$
git merge --no-ff -m "merge buf-101" bug-
Merge made by the 'recursive' strategy.
abc.c | +-
file changed, insertion(+), deletion(-)
ubuntu@myUbuntu:~/joe/learngit$
git branch -d bug-
//删除bug分支
已删除分支 bug-(曾为 5ad5f95)。
ubuntu@myUbuntu:~/joe/learngit$
git checkout dev
//回到dev分支上面
切换到分支 'dev'
ubuntu@myUbuntu:~/joe/learngit$ git status
位于分支 dev
无文件要提交,干净的工作区
ubuntu@myUbuntu:~/joe/learngit$
git stash list
//查看存储区,发现有一条刚才的存储
stash@{}: WIP on dev: b961f85 dev
ubuntu@myUbuntu:~/joe/learngit$
git stash pop
//弹出存储区
位于分支 dev
尚未暂存以备提交的变更:
(使用 "git add <file>..." 更新要提交的内容)
(使用 "git checkout -- <file>..." 丢弃工作区的改动) 修改: abc.c 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
丢弃了 refs
/stash@{
} (264672afc6d36af005a5a27e8c165ad89216eb2d)
ubuntu@myUbuntu:~/joe/learngit$
git stash list
//存储区为空。 //工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法: //(1)git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除; //(2)git stash pop,恢复的同时把stash内容也删了:
//可以多次stash,恢复的时候,先用git stash list
查看,然后恢复指定的stash,用命令:
$ git stash apply stash@{0}
Feature分支
ubuntu@myUbuntu:~/joe/learngit$ git branch
dev
* master
//接到命令添加新功能,创建功能分支
ubuntu@myUbuntu:~/joe/learngit$
git checkout -b feature-
切换到一个新分支 'feature-01'
ubuntu@myUbuntu:~/joe/learngit$ vi abc.c
ubuntu@myUbuntu:~/joe/learngit$ cat abc.c
I am a new feature.
ubuntu@myUbuntu:~/joe/learngit$ git add abc.c
ubuntu@myUbuntu:~/joe/learngit$ git status
位于分支 feature-
要提交的变更:
(使用 "git reset HEAD <file>..." 撤出暂存区) 修改: abc.c ubuntu@myUbuntu:~/joe/learngit$
git commit -m "add feature-01"
//完工以后,提交
[feature- 683e3bb] add feature-
file changed, insertion(+), deletion(-)
ubuntu@myUbuntu:~/joe/learngit$
git checkout dev
//回到其他分支,准备合并后删除删除功能分支
切换到分支 'dev'
ubuntu@myUbuntu:~/joe/learngit$ git branch
* dev
feature-
master
//接到命令,新功能取消,(不合并功能分支)删除功能分支
ubuntu@myUbuntu:~/joe/learngit$
git branch -d feature-
//提示,没有合并,不能删除,如需强制删除,使用参数D
error: 分支 'feature-01' 没有完全合并。
如果您确认要删除它,执行 'git branch -D feature-01'。
ubuntu@myUbuntu:~/joe/learngit$
git branch -D feature-
//强制删除分支
已删除分支 feature-(曾为 683e3bb)。
ubuntu@myUbuntu:~/joe/learngit$ git branch
* dev
master
(如果已经合并了怎么办?只能版本回退了。)
推送分支
ubuntu@myUbuntu:~/joe/learngit$ git remote //查看远程连接
origin
ubuntu@myUbuntu:~/joe/learngit$ git remote -v //显示详细的信息
origin git@github.com:joesGit15/learngit.git (fetch)
origin git@github.com:joesGit15/learngit.git (push)
ubuntu@myUbuntu:~/joe/learngit$ git status
位于分支 master
您的分支领先 'origin/master' 共 个提交。
(使用 "git push" 来发布您的本地提交)
无文件要提交,干净的工作区
ubuntu@myUbuntu:~/joe/learngit$ git push origin master //推送主分支
ubuntu@myUbuntu:~/joe/learngit$ git push origin dev //推送dev分支
并不是一定要把本地分支往远程推送,可以参考如下内容:
- master分支是主分支,因此要时刻与远程同步;
- dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
- bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
Git学习笔记(6)——Bug和Feature分支的更多相关文章
- GIT学习笔记(3):分支管理
GIT学习笔记(3):分支管理 何谓分支 GIT是如何存储数据的 GIT不是存储文件差异或者变化量,而是一系列文件的快照.在Git提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容 ...
- Git学习笔记-----下载GitHub上某个分支的代码
在GitHub上的仓库里,往往建有几个分支,如果只是想下载某个分支的代码,怎么办呢? 1.需要知道远程分支的名称,及远程分支所在的Git仓库 2.按下面指令下载 git clone -b 远程分支名称 ...
- Git学习笔记(二) 远程仓库及分支
添加远程仓库(以GitHub为例) 所谓的远程仓库,其实就和本地仓库一样,只是我们本地电脑可能会关机什么的.远程仓库的目的就是保证7*24小时开启状态.GitHub是一个很好的公共Git远程仓库(后面 ...
- git 学习笔记--Feature分支
软件开发中,总有无穷无尽的新的功能要不断添加进来. 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合 ...
- git学习笔记10-新开发的功能不想要了-强行删除分支
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支. 现在,你终于接 ...
- GIT学习笔记(4):远程分支
GIT学习笔记(4):远程分支 远程分支 远程分支是什么 远程分支是对远程仓库中的分支的索引.它们是一些无法移动的本地分支:只有在GIT进行网络交互时才会更新.远程分支就是书签,提醒着你上次连接远程仓 ...
- git学习笔记(四)—— 分支管理
一.创建与合并分支 git branch //查看分支 git branch <name> //创建分支 git checkout <name> //切换分支 git chec ...
- 【转帖】Git学习笔记 记录一下
本文内容参考了廖雪峰老师的博文,并做了适当整理,方便大家查阅. 原帖地址 https://wangfanggang.com/Git/git/ 常用命令 仓库初始化 - git init 1 git i ...
- GIT学习之路第五天 分支管理
本文参考廖雪峰老师的博客进行总结,完整学习请转廖雪峰博客 5.1创建与合并分支 首先创建dev分支,然后切换dev分支 $git checkout -b dev(包含创建并切换) 等价于<-&g ...
随机推荐
- 初识C语言
C语言是开发iOS软件的基础. 一.C语言简介 1. 简史 1) C语言于1972年发明,首次使用是用于重写UINX操作系统(UNIX以前主要是用汇编语言写的,它奠定了操作 ...
- 深入理解JavaScript中的==运算符
原文章地址 在详细介绍图1中的每个部分前,我们来复习一下JS中关于类型的知识: JS中的值有两种类型:基本类型.对象类型. 基本类型包括:Undefined.Null.Boolean.Number和S ...
- STM32 DMA模块的配置与使用
DMA有什么用? 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输.无须CPU的干预,通过DMA数据可以快速地移动.这就节省了CPU的资源来做其他操作. 有多少个DMA资源 ...
- Android观察者模式的简单实现demo
观察者模式就是:当一个对象的状态发送改变时,所有依赖于它的对象都能得到通知并被自动更新. 下面介绍一种简单的使用方法,(下面有demo链接)先看一下project的目录构成: ObserverList ...
- 黑马程序员_Java基础:反射机制(Reflection)总结
------- android培训.java培训.期待与您交流! ---------- 反射在java中有非常重大的意义,它是一种动态的相关机制,可以于运行时加载.探知.使用编译期间完全未知的clas ...
- iOS游戏截图或广告图尺寸要求
统一的标准:72 dpi,RGB,扁平化,非透明,高质量的JPEG或者PNG文件格式 ====================================================== 3. ...
- C#数据结构杂记
定义任何类时记得要定义无参构造函数,否则在反序列化的时候会抛出异常. [Serialize]声明该类可以被序列化 Const与readonly的区别 const本质上是常量没有任何方法修改值,read ...
- ant 的详细的入门教程
Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作. 一. ...
- 关于Xcode7中添加不了libresolv.dylib等类似库的问题
Xcode7中,由于某些机制,使得我们在添加类似于 libresolv.dylib.libz.dylib等库的时候,直接在Build Phases中点击加号添加,似乎已经无法找到相应的库.此时,我们可 ...
- styleId妙用
styleId妙用: <html:text property="etpsBlocReg.cptlTotal" style="width: 94%;" re ...