Git版本控制:Git分支处理
http://blog.csdn.net/pipisorry/article/details/46958699
分支的意义
创建分支可以避免提交代码后对主分支的影响,同时也使你有了相对独立的开发环境。
假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
分支管理使用基本命令
创建并切换到新分支
git checkout -b new_branch
新建分支
git branch new_branch
查看当前分支
git branch
切换到master分支
(dev): git checkout master
Note: 切换分支后你会发现本地文件会变化,如果dev分支和master文件不同的话。再cheout回来就又可以看到之前分支的文件了。不过git2.0以上好像都看得到文件。
在dev分支中时,可以通过git pull origin master将master分支上的文件下载到本地当前分支中。
合并分支到当前分支
git merge命令用于合并指定分支到当前分支
把dev分支的工作成果合并到master分支上:
$(master): git merge dev
合并分支的操作是从new_branch合并到master分支(这时master的内容就变成了dev的内容),当前环境在master分支。
删除分支
git branch -d dev
git push origin :dev #将删除操作提交到远程(删除远程分支,注意origin和:之间有空格)
皮皮Blog
git分支使用
Git里默认分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
每次提交,master分支都会向前移动一步。
当创建并进入新的分支dev时
$git checkout -b dev #这时是看不到master中的内容,如果想同步master内容到dev,需要使用git merge master
Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向!
从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:
假如在dev上的工作完成了,就可以把dev合并到master上。最简单的方法,就是直接把master指向dev的当前提交:
$git checkout master #到master中来时,本地看不到修改的文件及内容
$git merge dev #这样master分支和dev分支的内容一样了
git merge命令用于合并指定分支到当前分支。直接使用git merge的合并是“快进模式”Fast-forward,也就是直接把master指向dev的当前提交,所以合并速度非常快。当然,也不是每次合并都能Fast-forward,其它merge策略可参考后面的分支merge策略。
合并完成后,就可以放心地删除dev分支了:
$ git branch -d dev
Deleted branch dev (was fec145a).
删除后,查看branch,就只剩下master分支了:$ git branch #输出* master
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。
[创建与合并分支]
分支merge策略
git merge --no-ff dev
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
建议使用 git merge --no-ff,这样无论如何都会产生一个新的 merge commit。然后你 git show <merge-commit-sha1> 就可以看到这次 merge 的所有改动。
如果要强制禁用Fast forward模式,添加参数--no-ff,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
下面我们实战一下--no-ff方式的git merge:
首先,仍然创建并切换dev分支:
$ git checkout -b dev
Switched to a new branch 'dev'
修改readme.txt文件,并提交一个新的commit:
$ git add readme.txt
$ git commit -m "add merge"
[dev 6224937] add merge1 file changed, 1 insertion(+)
现在,我们切换回master:
$ git checkout master
Switched to branch 'master'
准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:
$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.readme.txt | 1 +1 file changed, 1 insertion(+)
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
合并后,我们用git log看看分支历史:
$ git log --graph --pretty=oneline --abbrev-commit
* 7825a50 merge with no-ff
|\
| * 6224937 add merge
|/
* 59bc1cb conflict fixed
...
可以看到,不使用Fast forward模式,merge后就像这样:
Git Rebase
不怎么好用,有风险。
[彻底搞懂 Git-Rebase]git merge –squash
–squash:使用squash方式合并,把多次分支commit历史压缩为一次
git merge –squash 是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用–squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并。
[git merge 将多个commit合并为一条之--squash 选项]
减少commit/更容易找到回滚点的策略
Note: 需要注意的一点是,无论是git merge dev还是git merge --no-ff dev,在master分支上都能看到dev上提交的所有commit,这样在master上直接找上一个回滚点也是很烦。需要使用
$git log --graph --pretty=oneline --abbrev-commit
这个来查询commit历史,更容易找出master上的commit。[Git版本控制:Git查阅、撤销文件修改和撤销文件追踪]
或者使用上面的git merge --spuash减少dev上的commit数。
实际开发中分支管理的几个基本原则
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
[分支管理策略]
皮皮Blog
写保护分支
Github推出了“可以写保护的分支”,对多人协作的项目非常有用:不得删除、不得强行推送、只有测试全部通过才接受PR
[About protected branches]
from:http://blog.csdn.net/pipisorry/article/details/46958699
ref:learnGitBranching-demo
Git版本控制:Git分支处理相关推荐
- git版本控制以及分支管理
git版本控制以及分支管理--一起乘坐时光机 四.深度剖析 一.版本控制---时光机穿梭 1.熟悉版本 2.版本回退 3.管理修改 1.管理修改以及理解工作的原理 2.撤销修改的内容 3.删除文件 二 ...
- Git版本控制__分支管理
文章目录 Git基本操作 1. git 两大特点 2. 安装与配置 3. 创建一个版本库 4.版本创建与回退 4.1 使用 4.2 工作区和版本库 工作区 ( Working Directory ) ...
- Git版本控制管理——分支
实际开发中,会在当前开发线路上拉出另外的开发线进行开发,比如软件功能已经比较稳定的话,在后续功能的开发过程中,就很可能会拉出独立的支线进行开发,待功能开发完毕后,再将该直线合入稳定的主线中. 当然实际 ...
- java中git版本控制,git版本控制管理是什么?git如何实现版本控制?
大家好,今天要跟大家讲的是关于git版本控制管理的一点小知识,git相信程序员小伙伴们都已经很熟悉了,很多项目开发都需要git,所以,git版本控制管理到底是干嘛的呢?Git又如何实现版本控制呢?下面 ...
- MIT 计算机操作环境导论Missing Semester Lesson 6 Git 版本控制(Git)
版本控制系统 (VCSs) 是一类用于追踪源代码(或其他文件.文件夹)改动的工具.顾名思义,这些工具可以帮助我们管理代码的修改历史:不仅如此,它还可以让协作编码变得更方便.VCS通过一系列的快照将某个 ...
- 最实用 Git 版本控制
git版本控制 Git概念 1.1. Git库中由三部分组成 Git 仓库就是那个.git 目录,其中存放的是我们所提交的文档索引内容,Git 可基于文档索引内容对其所管理的文档进行内容追踪,从而实现 ...
- Git本地库版本控制和分支管理
版本控制 ①git log [parameter] 查看版本记录(使用Hash值指向相关信息,只显示之前的版本) 常用参数: –pretty = oneline (或 --oneline,缩短Hash ...
- Git学习(了解版本控制、Git安装配置、Git基本理论、Git搭建、Git文件操作、使用码云或Github、IDEA集成Git,Git分支开发)
学习git之前,我们需要先明白一个概念,版本控制! 版本控制 什么是版本控制 版本迭代,新的版本!版本管理器. 版本控制(Revision Control)是一种在开发的过程中用于管理我们对文件.目录 ...
- 【Git版本控制】Git基础入门和分支管理
原文作者:我辈理想 版权声明:文章原创,转载时请务必加上原文超链接.作者信息和本声明. 文章目录 前言 一.Git是什么? 二.git代码托管平台 三.git入口 (一)安装 1.linux安装 2. ...
- Git 版本控制之 GitFlow
来源: http://t.cn/EbZKx96 最近在着手制定开发规范,想要把项目正规高效的跑起来.计划引入 Git 版本控制,Git-Flow 便成为了首选.因为之前并没有过多接触,所以先花些时间 ...
最新文章
- ORACLE SELECT INTO NO_DATA_FOUND问题
- 每日两SQL(5),欢迎交流~
- AGC012D - Colorful Balls(并查集)
- 彻底搞懂Cookie、Session、JWT和Token
- 解决连接mysql报错1130
- python——文本简单可逆加密
- Liang-Barsky算法
- 47 - 算法 - 记住常用位运算-Leetcode-136-只出现一次的数字
- .NET Remoting 入门实例
- 斯诺登NFT作品拍得者PleasrDAO将继续收藏NFT艺术品
- 如何利用开源风控系统 TH-Nubula(星云)防止撞库?
- 【TDA4系列】使用 Linux + RTOS 开发基于以太网的应用程序
- MATLAB之ODE
- matlab解超静定方程,超定方程和最小二乘法 | 学步园
- (专升本)PowerPoint(插入超链接和动作)
- 16进制颜色代码#FF000000 (css颜色值)
- 此程序被组策略阻止,有关详细信息请联系管理员
- 【C语言】创建各类三角形图案
- Nginx 实现域名访问以及反向代理
- 程序员月薪多少才不会焦虑