Git-07-分支管理
创建与合并分支
为什么要创建分支?
假设你准备开发一个新功能,但是需要两周才能完成,
第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。
如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。
你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,
而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,
这样,既安全,又不影响别人工作。
1 创建dev分支,并且切换到dev分支
git checkout -b dev命令相当于如下两条命令:
git branch dev #创建dev分支
git checkout dev #切换到dev分支
查看当前分支:
git branch

2 修改readme.md 内容,并且在分支上提交
新增加了一行test!

3 切换到master分支,并且查看readme.md文件
发现刚刚添加的那一行不存在

原因如下:刚才添加的行是在dev分支上提交的,而当前master分支此刻的提交点并没有改变

4 把dev分支工作成果合并到master分支
命令:git merge dev
test!这一行存在了

5 删除dev分支
命令:git branch -d dev

解决分支冲突
1 创建新分支 feature1,且切换到feature1分支

2 修改readme.md文件,增加一行

3 在feature1分支提交修改

4 切换到master分支,并且也修改readme.md文件,提交

现在feature1分支和master分支都有了提交,变成如下所示

5 合并分支
报错,提示readme.md文件存在冲突,必须手动解决冲突后在提交

查看readme.md文件内容,git用 <<<<<<, ======, >>>>>> 表示不同分支的内容

6 修改readme.md文件保存,提交

现在master和feature1分支变成如下所示

用 git log --graph --pretty=oneline --abbrev-commit 命令也能查看到

7 本次不需要在合并了,直接删除feature1分支即可

分支策略管理
合并分支时候,git会用 fast forward 模式,
这种模式下,删除分支后,会丢掉分支信息。
强制禁用 fast froward 模式,git 就会在合并分支时生成一个新的 commit ,这样可以从历史上看出分支信息。
1 创建dev分支,修改readme.md 文件,并提交

2 切回master分支,合并dev分支,使用 --no-ff 参数
git merge --no-ff -m "merge with no-ff" dev

3 git log查看分支历史
git log --graph --pretty=oneline --abbrev-commit

可以看出来不使用 fast forward 模式,合并分支是这样的

4 分支策略
1.master分支应该是非常稳定的,仅用来发布新版本,平时不在上面干活
2.干活都在dev分支上,dev分支是不稳定的
3.每个人都在dev分支上干活,是不是往dev分支合并就行了,如下图

bug分支
需求:
需要修复一个101的bug,但是当前dev分支的工作没提交

1 git stash 命令可以把现场 '储藏' 起来,等修复bug以后继续使用,然后工作区是干净的了

2 假设是需要在master分支修复bug,切换到master分区,然后在master分支上创建一个 issue-101 的bug分支

3 修复bug ,假设是在test!后面加上 修复 两个子,提交

4 切换到master分支,合并分支,删除 issue-101 分支

5 切回到dev分支继续工作
git stash list:查看
git stash pop:恢复的同事把stash内容也删除

6 查看readme.md文件,可以接着上次没做完的工作继续做了

Feature分支
开发一个新功能时候,最好是新建一个feature分支
开发一个代号为vulcan新功能
1 在dev分支上新建一个分支

2.模拟开发完成,提交

3 切回dev分支,准备合并

4 由于各种原因,刚开发的新功能需要取消,删除分支
git branch -d freature-vulcan不能删除新的分支

在没有被合并以前,可以通过下面办法删除
强行删除: git branch -D freature-vulcan

多人协作
当从远程仓库克隆时,实际上git自动把本地的master分支和远程的master分支对应起来了,
并且远程的仓库默认名称是origin
1 查看远程仓库信息:显示了抓取和推送的origin地址,如果没有推送权限,就看不到push地址

2.推送dev分支
git push origin dev

在github官网查看

3 抓取分支,在linux机器上抓取,注意需要把 ssh key 添加进去

查看只有readme.md这个文件

6 linux上修改dev.txt文件,提交到远程dev分支

7 在windows上进行添加文件,提交到远程dev分支
报错,提示要先 git pull

8 git pull ,直接git pull 也报错,原因没有指定本地的dev与远程的origin/dev分支链接

设置dev和origin/dev 链接,然后在git pull
git branch --set-upstream dev origin/dev

9 git push origin dev

10 多人协作总结
首先,可以用 git push origin branch-name 推送自己的修改
如果失败,则因为远程的分支比你本地的更新,所以先用 git pull 试图合并
如果合并失败,则解决冲突,并在本地提交
没有冲突或者解决冲突以后,在用 git push origin branch-name 推送就可以
Git-07-分支管理的更多相关文章
- Git的分支管理
0.引言 本文参考最后的几篇文章,将git的分支管理整理如下.学习git的分支管理将可以版本进行灵活有效的控制. 1.如何建立与合并分支 1.1分支的新建与合并指令 新建分支 newBranch,并进 ...
- 你真的了解git的分支管理跟其他概念吗?
现在前端要学的只是太多了,你是不是有时会有这个想法,如果我有两个大脑.一个学Vue,一个学React,然后到最后把两个大脑学的知识再合并在一起,这样就能省时间了. 哈哈,这个好像不能实现.现实点吧!年 ...
- git的介绍、git的功能特性、git工作流程、git 过滤文件、git多分支管理、远程仓库、把路飞项目传到远程仓库(非空的)、ssh链接远程仓库,协同开发
Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. [1] 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码 ...
- 引入git flow分支管理
git flow是Vincent Driessen提出了一个分支管理的策略,非常值得借鉴.它可以使得版本库的演进保持简洁,主干清晰,各个分支各司其职.井井有条. 先看下Vincent Driessen ...
- git branch分支管理用法总结
查看分支(远程和本地) 1 查看本地分支: $ git branch 2 查看远程分支: $ git branch -r 3.查看本地和远程分支 $ git branch -a 创建分支 1.创建本地 ...
- git(二) 分支管理
概念 分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇 ...
- Git Flow 分支管理简述
概述 Git 是什么 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的 ...
- git flow分支管理
阅读目录 两种核心分支 三种临时分支 Git Flow流程示例代码 Git Flow工具 分支命名规范 总结 git flow是Vincent Driessen提出了一个分支管理的策略,非常值得借鉴. ...
- Git(四)Git的分支管理
一. 创建合并分支原理 在我们每次的提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD指针严格来说不是指 ...
- 139.00.005 Git学习-分支管理
@(139 - Environment Settings | 环境配置) 一.Why? 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交, ...
随机推荐
- buu [V&N2020 公开赛]strangeCpp
拖入ida,静态调试一下,本来想动调的,发现一直缺dll.没办法,只能头铁,静态 找到主函数,然后并没有发现什么,找了半天,没结果,后面也是看了大佬wp,才找到解决方式,感觉这种只能通过动调来找到关键 ...
- 『心善渊』Selenium3.0基础 — 25、unittest单元测试框架
目录 1.unittest基本简介 2.unittest基本概念 (1)unittest核心的四个概念 (2)如何创建一个测试类 (3)test fixture常用的四个方法 (4)unittest编 ...
- Kubernetes-22:kubelet 驱逐策略详解
为什么要驱逐pod? 在可用计算资源较少时,kubelet为保证节点稳定性,会主动地结束一个或多个pod以回收短缺地资源,这在处理内存和磁盘这种不可压缩资源时,驱逐pod回收资源的策略,显得尤为重要. ...
- echarts堆叠柱状图在最上面的柱子显示总和
需求 柱子需设置barMinHeight 在堆叠柱状图的最上面显示当前堆叠的总和 直接上代码吧 需要注意:设置barMinHeight时为了让0不显示,只能将0设置为null; 设置为null的柱子l ...
- Vue高阶
Vue.cli是基于vue应用开发提供的一个脚手架工具,为应用搭建基础的框架架构,提供插件.开发服务.打包等功能. 1. 安装 node.js是一个JavaScript的运行环境,提供了一个事件驱动. ...
- P4827「国家集训队」 Crash 的文明世界
「国家集训队」 Crash 的文明世界 提供一种不需要脑子的方法. 其实是看洛谷讨论版看出来的( (但是全网也就这一篇这个方法的题解了) 首先这是一个关于树上路径的问题,我们可以无脑上点分治. 考虑当 ...
- Django基础011-form&modelform
1.form from django import forms from django.core.exceptions import ValidationError #出现异常时用的 from use ...
- golang开发:Error的使用
Error是Go语言开发中最基础也是最重要的部分,跟其他语言的try catch的作用基本一致,想想在PHP JAVA开发中,try catch 不会使用,或者使用不灵活,就无法感知到程序运行中出现了 ...
- Python入门学习指南
对于初学者,入门至关重要,这关系到初学者是从入门到精通还是从入门到放弃.以下是结合Python的学习经验,整理出的一条学习路径,主要有四个阶段 NO.1 新手入门阶段,学习基础知识 总体来讲,找一本靠 ...
- CF466D题解
思路: 我们首先处理出每个位子需要被多少个区间覆盖才能变成 \(h\) .即 $a_i=h-a_i $ 同时设定 \(b\) 序列为 \(a\) 序列的差分系列 如果 \(b_i==1\) ,很显然, ...