Git是一个分布式的版本管理工具。

在本地项目和服务器都会拥有版本库,本地版本库由自己控制,自由选择提交代码到服务器端

windows上也建议使用命令的方式来使用git,推荐使用客户端 :http://msysgit.github.io/

##git使用命令

###信息配置

把开发者的信息配置到项目中,提交的时候就会附上开发者的这些信息。

git config --global user.name "whthomas"
git config --global user.email "whthomas93@gmail.com"

###本地提交操作

使用commit命令可以将代码提交到本地版本库

git add .  #将所有改动文件添入缓存区
git commit -m "本次修改的注释(这个非常重要,是版本回退的重要信息,严禁随意填写!)"

###分支操作

git branch #查看所有分支
git branch <name> #新建一个分支,一般不使用
git checkout master -b dev #以当前master分支为基础,新建dev分支,并切换到dev分支上。一般使用这个命令新建分支。
git checkout dev #切换到dev分支上
git branch -d dev #删除dev分支,删除其他分支将dev换成需要被删除的那个分支名称就好了 git checkout origin/dev -b <name> #从服务器的分支上切出分支

###合并操作

git checkout master
git merge --no-ff dev

先切换到master分支上,然后将dev合并到master分支上。

git的合并在默认情况下会采用fast-farward merge模式,将master直接指向dev分支上:

添加上 --no-ff选项之后,会执行正常合并,在Master分支上生成一个新节点,这样可以明确合并的操作:

在我们未来的开发之中,只有当功能开发完成并被大家确认之后,才能合并。

###远程交互操作

我们在本地完成一系列的提交之后,需要把本地的代码库放到远端代码库供其他的小伙伴使用(这种方式很好地避免了经常性的代码冲突,我们在本地开发完成好了自己的功能并解决和远端服务器冲突之后才可以提交代码确保任何时候,远端服务器的代码都是干净的分支)。

git remote add <主机名> <网址> #添加远程主机,一般情况下主机名为origin
git push <远程主机名> <本地分支名>:<远程分支名> #推送本地分支上的内容到服务器上。
git pull <远程主机名> <远程分支名>:<本地分支名> #拉取远端服务器上的代码到本地使用。

###提交策略

使用svn的时候,很多人习惯下班之前做一次提交,我们希望在迁移到git上之后,大家能将颗粒度减小。比如我们在开发一个新的模块的时候,每完成一个功能就做一次提交,在这个页面开发完成之后能做一次commit提交,这样一旦出现问题,回退的力度会小一些。

##分支管理

分支是git一个非常重要的概念。

分支好比是在本地下载了多个完全相同的项目,然后再在这些目录上分别发开新功能,最后将不同的部分合并到一起,形成一个新的版本。

###固定分支

我们约定开发中启用2个相对固定的分支:

  • 主分支(master):这个是主分支
  • 开发分支(dev):开发分支,这是我们主要维护的分支。

####主分支

一个项目之中只保持一个master分支 , 所有提供给用户使用的正式版本,都在这个主分支上发布。

git的默认分支名字就叫master,它是自动建立的,在这条分支上的提交需要打上tag。表示发布的版本。

####开发分支

日常开发应该在dev分支上完成,这个分支用来存放最新的版本。大家将开发完成的功能都合并到这个分支上。

如果版本形成稳定,那么dev分支就可以合并到master分支上发布了。

除了以上两个分支之外,我们还需要三种临时性的分支:

  • 功能分支(feature)
  • 预发布分支(release)
  • 修补bug分支(fixbug)

这三个分支均属于临时性分支,在代码库中使用完成之后,应该被删除掉,使得代码库中总是只有dev和master两个分支。

####功能分支

命名规则 feature-*

我们开发以功能为单位切换分支,如果在开发同一个功能,担心受他们开发的影响,也应当在当前功能分支上切换出新的分支,开发完成之后合并到原先的功能分支上。

git checkout -b feature-x develop #从develop新建feature分支

... #在feature分支一系列操作之后

git checkout develop #切换回develop分支
git merge --no-ff feature-x #合并feature分支到develop上

####预发布分支

命名规则 release-*

预发布分支,合并到Master分支之前,我们可能需要有一个预发布的版本进行测试。

git checkout -b release-1.2 develop #从develop新建release-1.2分支

... #测到一些bug,一系列修复操作

git checkout master
git merge --no-ff release-1.2 git tag -a 1.2 #对合并生成的新节点,做一个标签 #不要忘记了开发分支也需要解决bug后的版本
git checkout develop
git merge --no-ff release-1.2

####修补bug分支

命名规则 fixbug-*

即使是正式版本发布之后bug仍然有可能存在。修复bug必须切换在新的分支上修复,在完成修复后再合并回master和dev分支。

特别注意在master分支上修复bug,bug修复完成之后也要记住将fixbug-*分支与dev做一次合并。

git checkout -b fixbug-0.1 master

git checkout master
git merge --no-ff fixbug-0.1
git tag -a 0.1.1 git checkout develop
git merge --no-ff fixbug-0.1

###git rebase操作

这个操作特别合适大家在功能分支开发中的合并。

我们经常会遇到合并冲突,这个时候,因为我们多人协作的时候,代码经常是同时开发,提交的commit不在一条时间线上。

假设我们在开发一个合同预览的功能,这条分支叫做feature-view-contract , 在本地和服务器上同时存在这条分支。

  1. 新建一个分支,并且代码和服务器中代码同步

    git checkout origin/v2.0 -b temp

  2. 为了保证新建的temp分支代码是最新的,可以多执行下面一步

git pull origin feature-view-contract:temp

  1. 当你新建分支后,系统会自动checkout到temp分支上,此时

git checkout feature-view-contract

  1. 合并代码,并整理

    git rebase temp //会将temp分支的代码合并过来,并按照提交的顺序排序

  2. 因为顺序是重新整理的,所以肯定会出现冲突

  3. 解决冲突,最后 git add . ,但不要 git commit

  4. 解决后,执行 :

    git rebase --continue

  5. 重新提交代码: git push feature-view-contract

这个时候,所有的提交点都被整理到一条直线上,在服务器版本库上看起来就像一个人开发的一样。

git 行动指南的更多相关文章

  1. git - 简易指南

    http://www.bootcss.com/p/git-guide/ git - 简易指南

  2. 【转】git - 简明指南

    git - 简明指南 助你入门 git 的简明指南,木有高深内容 ;) 作者:罗杰·杜德勒 感谢:@tfnico, @fhd 和 Namics其他语言 english, deutsch, españo ...

  3. 发布系统Git使用指南 - the Git Way to Use Git

    发布系统Git使用指南 --the Git Way to Use Git 背景 ​ 有文章曾归纳,Git是一套内容寻址文件系统,意思是,Git的核心是存储键值对^[1]^.显然,这样的形式不利于普通人 ...

  4. 如何加入别人的Git项目——Git Fork指南

    如何加入别人的Git项目--Git Fork指南 首先,在网页打开别人Git上的项目,点击右上角的.下图因为Fork过了,所以灰了. 随即弹出如下窗口,当然选择确定. 于是,我们在在自己的项目列表可以 ...

  5. git——简易指南

    Git对于我来说,只知道是一个版本控制器,类似于乌龟的svn.其中也仅仅会几个常的命令,比如说“更新git pull”.“提交git push”等等,因为记得当初使用的时候,师傅告诉我,对于你不懂这个 ...

  6. 我总结的git命令指南。

    git命令行指南 1.windows上安装git的网址:http://msysgit.github.com/. 没有安装过git的 这个网址里下mymsgit. 因为发现有些同学对git还不是那么熟悉 ...

  7. git - 简明指南(转)

    安装 下载 git OSX 版 下载 git Windows 版 下载 git Linux 版 创建新仓库 创建新文件夹,打开,然后执行  git init 以创建新的 git 仓库. 检出仓库 执行 ...

  8. git - 简明指南

    助你入门 git 的简明指南,木有高深内容 ;) 作者:罗杰·杜德勒 感谢:@tfnico, @fhd 和 Namics如有纰漏,请在 github 提报问题 安装 下载 git OSX 版 下载 g ...

  9. Git 使用指南(cmd + gui)

    git 使用简易指南http://www.bootcss.com/p/git-guide/ Git版本控制使用方法入门教程http://www.uml.org.cn/pzgl/201204285.as ...

  10. Git 进阶指南(git ssh keys / reset / rebase / alias / tag / submodule )

    在掌握了基础的 Git 使用 之后,可能会遇到一些常见的问题.以下是猫哥筛选总结的部分常见问题,分享给各位朋友,掌握了这些问题的中的要点之后,git 进阶也就完成了,它包含以下部分: 如何修改 ori ...

随机推荐

  1. 关于.NET异常处理的思考

    年关将至,对于大部分程序员来说,马上就可以闲下来一段时间了,然而在这个闲暇的时间里,唯有争论哪门语言更好可以消磨时光,估计最近会有很多关于java与.net的博文出现,我表示要作为一个吃瓜群众,静静的 ...

  2. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  3. C语言 · Torry的困惑(基本型)

    问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7--这样的数叫做质数.Torry突然想到一个问题,前10.100.1000.10000--个质数的乘积是多少呢?他把这个问题告诉老师 ...

  4. 利用CSS中的:after、: before制作的边三角提示框

    小颖昨天分享了一篇参考bootstrap中的popover.js的css画消息弹框今天给大家再分享一篇使用:before和:after伪元素画消息弹框的CSS. 画出来是介个酱紫的: 有没有觉得画的萌 ...

  5. Android性能优化之利用LeakCanary检测内存泄漏及解决办法

    前言: 最近公司C轮融资成功了,移动团队准备扩大一下,需要招聘Android开发工程师,陆陆续续面试了几位Android应聘者,面试过程中聊到性能优化中如何避免内存泄漏问题时,很少有人全面的回答上来. ...

  6. FFmpeg + SoundTouch实现音频的变调变速

    本文使用FFmpeg + SoundTouch实现将音频解码后,进行变调变速处理,并将处理后的结果保存为WAV文件. 主要有以下内容: 实现一个FFmpeg的工具类,保存多媒体文件所需的解码信息 将解 ...

  7. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  8. CSS常见技巧

    一.CSS Sprite(雪碧图|精灵图)指什么? 有什么作用? CSS雪碧 即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图像和背景图片合并到一张图片上,然后利 ...

  9. java中的内部类总结

    内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液.跳动) 显然, ...

  10. 二叉树的递归实现(java)

    这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...