GitHub-分支管理01
参考博文:廖雪峰Git教程
1. 分支说明
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
2. 创建与合并分支
2.1. 创建且使用分支
[root@mini05 zhangtest]# pwd
/opt/git_repository/zhangtest
[root@mini05 zhangtest]# git checkout -b dev
Switched to a new branch 'dev'
git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令:
$ git branch dev # 创建分支
$ git checkout dev # 使用分支
Switched to branch 'dev'
查看当前分支
[root@mini05 zhangtest]# git branch # 当前分支前面会标一个*号
* dev
master
在当前分支提交信息
[root@mini05 zhangtest]# cat test.info where are you from? # 增加的内容
[root@mini05 zhangtest]# git add test.info
[root@mini05 zhangtest]# git commit -m "add test.info"
[dev 068d030] add test.info
file changed, insertion(+)
OK,现在 dev
分支的工作完成,我们就可以切换回master
分支
2.2. 切回到master并合并分支
切回master分支
[root@mini05 zhangtest]# git checkout master
Switched to branch 'master'
[root@mini05 zhangtest]# git branch
dev
* master
[root@mini05 zhangtest]# cat test.info
切换回master
分支后,再查看一个test.info文件,刚才添加的内容不见了!因为那个提交是在dev
分支上,而master
分支此刻的提交点并没有变
合并dev分支
把dev
分支的工作成果合并到master
分支上
[root@mini05 zhangtest]# git merge dev
Updating c752e64..068d030
Fast-forward
test.info | +
file changed, insertion(+)
[root@mini05 zhangtest]# cat test.info where are you from?
合并后,再查看test.info的内容,就可以看到,和dev
分支的最新提交是完全一样的。
2.3. 删除dev分支
[root@mini05 zhangtest]# git branch -d dev # 删除分支
Deleted branch dev (was 068d030).
[root@mini05 zhangtest]# git branch
* master
2.4. 分支说明【重点】
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master
分支上工作效果是一样的,但过程更安全。
3. 解决分支冲突
3.1. 创建且使用分支
[root@mini05 zhangtest]# git checkout -b feature1
Switched to a new branch 'feature1'
[root@mini05 zhangtest]# tail -n3 README.md # 最后一行为新加的
ccc
ddd
Creating a new branch is quick AND simple.
添加并提交到本地仓库
[root@mini05 zhangtest]# git add README.md
[root@mini05 zhangtest]# git commit -m "RE new line"
[feature1 75b1490] RE new line
file changed, insertion(+)
3.2. 切回到master且新增提交
切换到master分支
[root@mini05 zhangtest]# git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by commit.
(use "git push" to publish your local commits)
在master
分支上把readme.txt
文件的最后添加一行并提交
[root@mini05 zhangtest]# tail -n3 README.md # 最后一行为添加
ccc
ddd
Creating a new branch is quick & simple.
[root@mini05 zhangtest]# git add README.md
[root@mini05 zhangtest]# git commit -m "ma commit"
[master 41de15c] ma commit
file changed, insertion(+)
现在,master
分支和feature1
分支各自都分别有新的提交,变成了这样
3.3. 合并分支处理
尝试合并feature1
[root@mini05 zhangtest]# git merge feature1
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
查看冲突的文件
[root@mini05 zhangtest]# git status
# On branch master
# Your branch is ahead of 'origin/master' by commits.
# (use "git push" to publish your local commits)
#
# You have unmerged paths.
# (fix conflicts and run "git commit")
#
# Unmerged paths:
# (use "git add <file>..." to mark resolution)
#
# both modified: README.md
#
no changes added to commit (use "git add" and/or "git commit -a")
直接查看冲突内容并修改
[root@mini05 zhangtest]# cat README.md # 查看冲突内容
# zhangtest
zhangtest
张三
Git is a distributed version control system.
Git is free software. Git tracks changes.
aaa
bbb
ccc
ddd
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
修改后保留的内容并再次提交
[root@mini05 zhangtest]# cat README.md
# zhangtest
zhangtest
张三
Git is a distributed version control system.
Git is free software. Git tracks changes.
aaa
bbb
ccc
ddd
Creating a new branch is quick AND simple.
[root@mini05 zhangtest]# git add README.md
[root@mini05 zhangtest]# git commit -m "conflict fixed"
[master 56c6e0c] conflict fixed
现在,master
分支和feature1
分支变成了下图所示:
用带参数的git log
也可以看到分支的合并情况
[root@mini05 zhangtest]# git log --graph --pretty=oneline --abbrev-commit
* 56c6e0c conflict fixed
|\
| * 75b1490 RE new line
* | 41de15c ma commit
|/
* 068d030 add test.info
* c752e64 add info
* 3b7db1c add aaa.txt
* c795cfc del aaa.txt
* 6d0226b add aaa.txt
* b293c46 git tracks changes
* 53f0f2e understand how stage works
* 65a58f2 add info
* d4fb57e Update README.md
* e730676 Initial commit
3.4. 删除之前创建的分支
[root@mini05 zhangtest]# git branch -d feature1
Deleted branch feature1 (was 75b1490).
4. 分支管理策略【推荐】
通常,合并分支时,如果可能,Git会用Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
下面我们实战一下 --no-ff
方式的git merge
4.1. 创建并使用分支
[root@mini05 zhangtest]# git checkout -b dev
Switched to a new branch 'dev'
修改readme.txt文件,并提交.
[root@mini05 zhangtest]# tail -n3 README.md # 最后一行为新增行
Creating a new branch is quick AND simple.
feature2
dev brach new
[root@mini05 zhangtest]# git add README.md
[root@mini05 zhangtest]# git commit -m "dev brach new"
[dev ef9042a] dev brach new
file changed, insertion(+)
4.2. 切回到master并合并分支
切回到master分支
[root@mini05 zhangtest]# git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by commits.
(use "git push" to publish your local commits)
[root@mini05 zhangtest]# git branch
dev
* master
准备合并dev
分支,请注意 --no-ff
参数,表示禁用Fast forward
:
[root@mini05 zhangtest]# git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
README.md | +
file changed, insertion(+)
因为本次合并要创建一个新的commit,所以加上-m
参数,把commit描述写进去。
4.3. 用git log看看分支历史
合并后,我们用git log
看看分支历史:
[root@mini05 zhangtest]# git log --graph --pretty=oneline --abbrev-commit
* aadf8b4 merge with no-ff
|\
| * ef9042a dev brach new
|/
* 31230a8 feature2
* 56c6e0c conflict fixed
|\
| * 75b1490 RE new line
* | 41de15c ma commit
|/
* 068d030 add test.info
* c752e64 add info
* 3b7db1c add aaa.txt
………………
可以看到,不使用Fast forward
模式,merge后就像这样:
4.4. 分支策略【重点】
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev
分支上,也就是说,dev
分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev
分支合并到master
上,在master
分支发布1.0版本;
你和你的小伙伴们每个人都在dev
分支上干活,每个人都有自己的分支,时不时地往dev
分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
GitHub-分支管理01的更多相关文章
- github 分支管理
github 分支管理 最近有同事问我git 如何管理分支,这里我以github为例,做下工作中常用的分支管理操作. 分支管理 作用:假设你准备开发一个新功能,但需要两周才能完成,第一周写了60%,如 ...
- github分支管理
一. 需要创建的分支 1.master 主分支 2.dev 开发分支 3.bug 修改bug分支 4.release 预发布分支 二.分支使用 1.在master上创建dev,bug,release分 ...
- 01 . Git常用命令及方法和分支管理
原理 # Workspace:工作区 # Index / Stage:暂存区 # Repository:仓库区(或本地仓库) # Remote:远程仓库 本地分支关联远程 git branch --s ...
- 02: git分支管理
目录:GIT其他篇 01: git & github 02: git分支管理 目录: 1.1 Git常用命令 1.2 主要分支(保护分支) 1.3 特性分支:feature (开发分支合并到d ...
- Git远程和分支管理
一.远程 Git是分布式版本控制系统,最重要的优点就是远程仓库托管代码.不用自己搭建一个服务器,在github上面注册一个账户就可免费获取远程仓库. 首先需要先在github上面 ...
- 在GitHub上管理项目
在GitHub上管理项目 新建repository 本地目录下,在命令行里新建一个代码仓库(repository) 里面只有一个README.md 命令如下: touch README.md git ...
- Git 分支管理详解
大纲: 1.前言 2.创建分支 3.切换分支 4.合并分支(快速合并) 5.删除分支 6.分支合并冲突 7.合并分支(普通合并) 8.分支管理策略 9.团队多人开发协作 10.总结 注,测试机 Cen ...
- Git 最佳实践:分支管理
5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践.最后我为团队选择了这个git分支管理实践 A successful Git branching ...
- 【学习总结】Git学习-参考廖雪峰老师教程六-分支管理
学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...
- [转载]理解 Git 分支管理最佳实践
原文 理解 Git 分支管理最佳实践 Git 分支有哪些 在进行分支管理讲解之前,我们先来对分支进行一个简单的分类,并明确每一类分支的用途. 分支分类 根据生命周期区分 主分支:master,deve ...
随机推荐
- iPhone屏幕尺寸说明及iPhone在微信上的一些表现
很久没有更新博客了,由于自己的水平一般,能力有限,这种情况下的知识点可能过于薄弱,所以不好分享给大家,注意是怕误导大家了,最近学习移动端的东西,有点心得,分享给大家,希望对大家有所帮助,如果有什么地方 ...
- C#通过调用WinApi打印PDF文档类,服务器PDF打印、IIS PDF打印
其他网站下载来的类,可以用于Winform.Asp.Net,用于服务器端PDF或其他文件打印. 直接上代码: using System; using System.Collections.Generi ...
- mysql中的prepare介绍和应用
简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名.在其他的sql数据库中也是如此,mssql的解决方法是将整条sql语句作为变量,其中穿插变 ...
- axios 用法简介(转载)
axios 来源:https://www.jianshu.com/p/df464b26ae58 一.安装 1. 利用npm安装npm install axios --save2. 利用bower安 ...
- js中const,var,let区别(转载)
js中const,var,let区别 来源:https://www.cnblogs.com/zzsdream/p/6372729.html 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇 ...
- Java线程池 Executor框架概述
线程池的意义 循环利用线程资源,避免重复创建和销毁线程 线程池的任务是异步执行的,只要提交完成就能快速返回,可以提高应用响应性 Java线程池还有一个很重要的意义:Java线程池就是JDK 5 推出的 ...
- Android Studio 学习(三) 广播
动态注册监听网络变化 创建intentFilter 并addAction 代表了监听哪个广播 然后使用registerReceiver()方法 将intentFilter 与 自己创建的监听器 传进去 ...
- Puppeteer之爬虫入门
译者按: 本文通过简单的例子介绍如何使用Puppeteer来爬取网页数据,特别是用谷歌开发者工具获取元素选择器值得学习. 原文: A Guide to Automating & Scrapin ...
- ITEXT5.5.8转html为pdf文档解决linux不显示中文问题
在windows中支持中文,在linux中不显示中文. 解决方法:添加字体库 下载simsun.ttc字体文件,把这文件拷贝到Linux系统的 /usr/share/fonts/ 下就可以了.
- HTML5中的input type为file控件限制上传文件类型及扩展
简单介绍 input file控件限制上传文件类型如下:1.文件类型中间用,分开:2.html和htm这样的要写成两个: 3实例: <input type="file" na ...