Git作为一个目前非常流行的版本管理工具,深受开发者的喜爱。那么怎样才能将Git的作用发挥的更好呢?我根据实际的项目经验,归纳总结了以下Git工作流的最佳实践。这里所谓的最佳,是经过多次项目经验后,根据自身的情况总结出来的我认为最为合理的方案。

Git工作流的最佳实践方案包括如下四个步骤:

1. 根据task创建对应的branch

当我们开始针对一个task编码之前,首先第一步应该要创建一个新的branch,然后checkout到这个新的branch上开始编码。我们不应该直接在master上进行新的task的编码工作,尤其是在团队成员较多的情况下。团队的每个成员都应工作于自己新创建的branch上,而不会操作master分支,这样做的好处在于master始终处于一种“干净”的状态,不会因为多人的同时操作而造成过多的冲突,同时也降低了master被误操作的可能性。具体的操作如下:

//切换到master分支;
git checkout master
//拉取master远程分支的代码;
git pull origin master
//创建新的分支并切换到新的分支上。
git checkout -b <my branch name>

2. 在新建的分支上编码,push代码到远程分支上

分支创建完毕之后,我们就可以开始在branch上进行编码了。这是我们完成task的最主要的阶段,绝大部分的工作在此阶段完成,同时它应该也是持续时间最长的阶段。它的主要任务就是完成task的编码工作,并最终将代码push到当前分支对应的远程分支上去。

首先看一下这个阶段Git工作的命令流,示例如下:

//创建新的branch后的第一天工作结束时,首先将改动的代码放入index区;
git add .
//然后提交代码到本地仓库;
git commit  -m "The first commit message"
//第二天开始工作前,切换到master分支;
git checkout master
//从master的远程分支拉取代码;
git pull origin master
//切换到task所在的本地分支;
git checkout <my branch name>
//将master上的最新的代码合并到当前分支上,这里的-i的作用是将我们 当前分支之前的commit压缩成为一个commit,这样做的好处在于当我们之后创建pull request并进行相应的code review的时候,代码的改动会集中在一个commit,使得code review更直观方便;
git rebase -i master  //第二天工作结束之后,将第二天的改动放入index区;
git add .
//提交代码到当前branch的本地仓库;
git commit  -m "The second commit message"
//第三天开始工作前,
git checkout master //同上第二天
git pull origin master //同上第二天
git checkout //同上第二天
git rebase -i master  //同上第二天 //第三天工作结束之后,
git add . //同上第二天
git commit  -m "The third commit message" //同上第二天

..........

//最后,当task的所有编码完成之后,将代码push到远程分支。
git push --set-upstream origin <my branch name>

通过以上的工作流可以看出,我们在完成task期间所有的代码都始终存放在我们新创建的branch的本地仓库上。只有当所有的编码工作完成之后,才会将最终的代码push到当前分支的远程仓库。这样做的好处在于,我们push到远程的代码,也就是之后会通过pull request被code review的代码,始终是针对一个单独task的完整代码,这将有利于之后code review的执行。不过这样做同时可能会存在一个缺点,那就是最终一次push的代码可能会非常庞大,这就要求我们对于task粒度的把握应该更合适。我们不应针对一个非常大的task创建branch,完成编码,而是应该尽可能的将task分解成一个个粒度较小的子task,进而针对子task创建branch完成编码的工作。这是一项非常有技巧的工作,需要丰富的实践经验,它也不是本节要讨论的内容,不再赘述。

3. 创建pull request, 进行code review

当所有的代码都已经被push到远程分支后,这时我们还不可以将代码合并到master上去,我们应该要做的是创建pull request。pull request的作用在于它可以使得代码在merge到master分支之前,能够被团队成员code review,从而提高代码的质量以及降低出错的概率。实际项目中我们使用jira来帮助我们创建相应的pull request,当然Github本身就具备创建pull request的功能。创建pull request的操作非常简单,无非就是点击创建pull request的按钮,填写comment信息,并输入可以进行code review的成员名称。当pull request创建完成之后,所有可以进行code review的团队成员都会收到邮件通知,并通过相应的pull request的链接查看代码的改动,从而完成code review的工作。这个步骤没有实际的Git指令的操作。

4. 合并代码到master,并删除之前创建的branch

当所有的reviewer都结束了code review,且都已经将pull request标注为approved状态的时候,我们就可以将branch合并到master上去,并最终push到远程master分支。示例如下:

git checkout master //切换到master分支;
git merge <my branch name>//合并之前创建的分支的代码到master分支上;
git push origin master//将master的代码push到master的远程分支;
git branch -d <my branch name>//删除之前创建的分支。

经过以上四个步骤之后,一个task的 Git的工作流就结束了。之后,我们可以愉快的开始下一个task了~~

Git工作流程最佳实践总结的更多相关文章

  1. [转载]理解 Git 分支管理最佳实践

    原文 理解 Git 分支管理最佳实践 Git 分支有哪些 在进行分支管理讲解之前,我们先来对分支进行一个简单的分类,并明确每一类分支的用途. 分支分类 根据生命周期区分 主分支:master,deve ...

  2. git工作流程

    git工作流程 一般工作流程如下: 克隆 Git 资源作为工作目录. 在克隆的资源上添加或修改文件. 如果其他人修改了,你可以更新资源. 在提交前查看修改. 提交修改. 在修改完成后,如果发现错误,可 ...

  3. 漫谈Github与开源,Git介绍以及Git的思想和基本工作原理 Git工作流程

    漫谈Github与开源 文字亮点: 为什么这些优秀的工程师会开源自己的项目? 因为开源是一种精神. 无数的软件开发者苦心积虑保护自己的代码不被破解,而还是被聪明绝顶的脚本小子破解了,但破解无数软件的脚 ...

  4. Git-Runoob:Git 工作流程

    ylbtech-Git-Runoob:Git 工作流程 1.返回顶部 1. Git 工作流程 本章节我们将为大家介绍 Git 的工作流程. 一般工作流程如下: 克隆 Git 资源作为工作目录. 在克隆 ...

  5. git详情、git工作流程、常用命令、忽略文件、分支操作、gitee远程仓库使用

    今日内容概要 git详情 git工作流程 git常用命令 过滤文件 分支操作 git远程仓库使用 可参照:https://www.cnblogs.com/liuqingzheng/p/15328319 ...

  6. git的介绍、git的功能特性、git工作流程、git 过滤文件、git多分支管理、远程仓库、把路飞项目传到远程仓库(非空的)、ssh链接远程仓库,协同开发

    Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. [1] 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码 ...

  7. 应用Git Flow—Git团队协作最佳实践

    规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高. 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...

  8. Git Flow,Git团队协作最佳实践

    规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高, 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...

  9. Git Flow——Git团队协作最佳实践

    规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高. 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...

随机推荐

  1. HTML里用如何包含引用另一个html文件 .

    给大家整理了3个方法,一个是HTML的iframe标签,别两个是JS引用.比如要在arr.html文件里引用index.html文件,方法如下. HTML引用方法: <iframe name=& ...

  2. C#并行Parallel编程模型实战技巧手册

    一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理和 ...

  3. 最近无意中看到一个讲解spring mvc的系列,从源码的角度讲解,特记录下来,供以后反复学习

    SpringMVC深度探险(一) —— SpringMVC前传 SpringMVC深度探险(二) —— SpringMVC概览 SpringMVC深度探险(三) —— DispatcherServle ...

  4. Log4j详细介绍(五)----输出地Appender

    Appender表示日志输出到什么地方,常用的输出地有控制台,文件,数据库,远程服务器等.Log4j中内置了常用的输出地,一般情况下配置一下即可使用.所有的Appender都实现自org.apache ...

  5. [Functional Programming] Using Lens to update nested object

    For example, in React application, we have initial state; const data = { nextId: 4, todoFilter: 'SHO ...

  6. SPLIT_STR

    CREATE DEFINER=`root`@`%` FUNCTION `vir`.`SPLIT_STR`( x VARCHAR(1000), delim VARCHAR(12), pos INT) R ...

  7. Android + Eclipse + PhoneGap 2.9.0 安卓最新环境配置,部分资料整合网上资料,已成功安装.

    前言:最近心血来潮做了一个以品牌为中心的网站,打算推出本地服务o2o应用.快速开发手机应用,最后选择了phonegap,这里我只是讲述我安装的过程,仅供大家参考. 我开发的一个模型http://www ...

  8. 《Unix&Linux大学教程》学习笔记七:进程与作业控制

    1:进程:一个内存中的程序+程序所需数据+管理程序的各种状态信息. 2:进程由内核进行管理,内核使用调度器,给予进程一个时间片来运行,然后切换到下一个进程. 3:进程分叉 fork :创建一个子进程 ...

  9. 1分钟试用PowerShell 5.0新功能PowerShellGet安装Script Browser和Script Analyzer

    微软PowerShell 产品组上周发布了PowerShell 5.0 PowerShellGet功能.有了它,IT 人员可以方便地搜索,安装,更新PowerShell Module.在这篇博客中,我 ...

  10. 【编码题篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题

    编写一个方法 求一个字符串的字节长度假设:一个英文字符占用一个字节,一个中文字符占用两个字节 function GetBytes(str){ var len = str.length; var byt ...