【译】如何高效的使用 Git
代码昨天还是运行好好的今天就不行了。
代码被删了。
突然出现了一个奇怪的 bug,但是没人知道怎么回事。
如果你出现过上面的任何一种情况,那本篇文章就是为你准备的。
除了知道 git add
, git commit
, git push
之外,Git 中还需要其他重要的技术需要掌握。长远来看对我们是有帮助的。这里我将向你展示 Git 的最佳实践。
Git 工作流
当有多个开发者同时涉及到一个项目时那么就非常有必要正确使用 Git 工作流。
这里我将介绍一种工作流,它在一个多人大型项目中将非常有用。
前言
突然有一天,你成为了一个项目的技术 Leader 并计划做出下一个 Facebook。在这个项目中你有三个开发人员。
- Alice:一个开发小白。
- Bob:拥有一年工作经验,了解基本开发。
- John:三年开发经验,熟练开发技能。
- 你:该项目的技术负责人。
Git 开发流程
Master 分支
- Master 分支应该始终和生产环境保持一致。
- 由于 master 和生产代码是一致的,所以没有人包括技术负责人能在 master 上直接开发。
- 真正的开发代码应当写在其他分支上。
Release(发布) 分支
- 当项目开始时,第一件事情就是创建发布分支。发布分支是基于 master 分支创建而来。
- 所有与本项目相关的代码都在发布分支中,这个分支也是一个以
release/
开头的普通分支。 - 比如这次的发布分支名为
release/fb
。 - 可能有多个项目都基于同一份代码运行,因此对于每一个项目来说都需要创建一个独立的发布分支。假设现在还有一个项目正在并行运行,那就得为这个项目创建一个单独的发布分支比如
release/messenger
。 - 需要单独的发布分支的原因是:多个并行项目是基于同一份代码运行的,但是项目之间不能有冲突。
Feature(功能分支) branch
- 对于应用中的每一个功能都应该创建一个独立的功能分支,这会确保这些功能能被单独构建。
- 功能分支也和其他分支一样,只是以
feature/
开头。 - 现在作为技术 Leader,你要求 Alice 去做 Facebook 的登录页面。因此他创建了一个新的功能分支。把他命名为
feature/login
。Alice 将会在这个分支上编写所有的登录代码。 - 这个功能分支通常是基于 Release(发布) 分支 创建而来。
- Bob 的任务为创建添加好友页面,因此他创建了一个名为
feature/friendrequest
的功能分支。 - John 则被安排构建消息流,因此创建了一个
feature/newsfeed
的功能分支。 - 所有的开发人员都在自己的分支上进行开发,目前为止都很正常。
- 现在当 Alice 完成了他的登录开发,他需要将他的功能分支
feature/login
发送给 Release(发布) 分支。这个过程是通过发起一个pull request
完成的。
Pull request
首先 pull request
不能和 git pull
搞混了。
开发人员不能直接向 Release(发布) 分支推送代码,技术 Leader 需要在功能分支合并到 Release(发布) 分支之前做好代码审查。这也是通过 pull request
完成的。
Alice 能够按照如下 GitHub 方式提交 pull request
。
在分支名字的旁边有一个 “New pull request” 按钮,点击之后将会显示如下界面:
- 比较分支是 Alice 的功能分支
feature/login
。 - base 分支则应该是发布分支
release/fb
。
点击之后 Alice 需要为这个 pull request
输入名称和描述,最后再点击 “Create Pull Request” 按钮。
同时 Alice 需要为这个 pull request
指定一个 reviewer。作为技术 Leader 的你被选为本次 pull request
的 reviewer。
你完成代码审查之后就需要把这个功能分支合并到 Release(发布) 分支。
现在你已经把 feature/login
分支合并到 release/fb
,并且 Alice 非常高兴他的代码被合并了。
代码冲突
【译】如何高效的使用 Git的更多相关文章
- 配置一个高效快速的Git环境
username and email editor difftool and mergetool alias 可以直接修改~/.gitconfig文件,也可以用命令配置一个可以实际使用的高效的Git环 ...
- [译]How to Write a Git Commit Message
原文: http://chris.beams.io/posts/git-commit/ 介绍:为什么好的commit message很重要 你浏览项目commit message的时候或多或少会有些困 ...
- 如何高效的使用 Git
-- 代码昨天还是运行好好的今天就不行了. 代码被删了. 突然出现了一个奇怪的 bug,但是没人知道怎么回事. 如果你出现过上面的任何一种情况,那本篇文章就是为你准备的. 除了知道 git add, ...
- [译]如何取消本地的git commit提交?
git reset HEAD~1 原文来源:https://stackoverflow.com/questions/4850717/how-to-cancel-a-local-git-commit
- [译] 关于 Git 你需要知道的一些事情
分支和合并 Git 跟其他版本控制系统最大的优势就在于其高级的分支模型. Git 允许而且 鼓励 你在本地使用多个完全独立的分支.这些分支的创建,合并和删除几乎都可以在几秒内完成. 这意味着你可以轻松 ...
- Git入门学习和使用
#开篇废话 开篇废话又回来了,离开博客算是有一年了,之间曾经痛下很多次决心,继续写博客,后来都失败了,前年为了申请个CSDN专家,每天发博客,那个高产的状态,现在已然不行了,时过境迁,当时为了吃口饱饭 ...
- 发现一个不错的学习git的地方
Git入门:http://rogerdudler.github.io/git-guide/index.zh.html 简洁.实用.高效的学习git基本操作的方式
- 或许是介绍Android Studio使用Git最详细的文章
欢迎访问我的个人博客转发请注明出处:http://www.wensibo.top/2017/03/12/GitOnAS/ 前言 本文较长,图片很多很多,流量党慎入 使用Git已经有一段时间了,但是之前 ...
- Git应用详解第五讲:远程仓库Github与Git图形化界面
前言 前情提要:Git应用详解第四讲:版本回退的三种方式与stash 这一节将会介绍本地仓库与远程仓库的一些简单互动以及几款常用的Git图形化界面,让你更加方便地使用git. 一.Git裸库 简单来说 ...
随机推荐
- VSTO 函数InStrRev
返回某一字符串从另一字符串的右侧开始算起第一次出现的位置. 参数 StringCheck 类型:System.String 必选. 搜索的 String 表达式. StringMatch 类型:Sys ...
- CTSC2018 被屠记
占坑 day-1 Gery 和 lll 在火车上谈笑风生 day0 上午 Gery:"我要吊打全场" 下午 Gery 忘带杯子了. Gery:"我过两天碰杯了就可以喝到水 ...
- 1064 Financial Management
http://acm.hdu.edu.cn/showproblem.php?pid=1064 思路:看懂英文就很简单,就是12个数相加求平均数就ok了. 扩展: C++ 标准输入输出流的控制符 #in ...
- Python操作Excel, 开发和调用接口,发送邮件
笔记: 上周回顾: 模块: 导入模块的顺序 lyl.py # def hhh(): pass name = 'lyl' a.py import lyl import sys from lyl impo ...
- VUE 一些环境配置
1. 安装 nrm 一键切换npm源 npm i nrm -g [安装命令工具] nrm ls [罗列出所有的源] nrm use taobao [使用 ...
- 锐捷交换机配置DHCP SERVER给固定的MAC地址分配静态IP
今天突发奇想,想给自己的手机分配固定地址,使得接入公司无线网络时每次都取到同一ip地址,这样可以排除认证登录问题. 上网溜达一下,记录下锐捷官方的[常见问题]如下,经验证可行. 需求: 给MAC地址为 ...
- Android四大组件的简介
Android开发四大组件分别是: 一.活动(Activity): 用于表现功能.二.服务(Service): 后台运行服务,不提供界面呈现. 三.广播接收器(BroadcastReceiver):用 ...
- [LeetCode] Fibonacci Number 斐波那契数字
The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such th ...
- s:if 判断 s:property
判断<s:property value="XXX"/> 是否是空字符串 则:<s:if test=" XXX == '' ">< ...
- LVM学习笔记
LVM Logical Volume Manager Volume management creates a layer of abstraction over physical storage, a ...
username and email editor difftool and mergetool alias 可以直接修改~/.gitconfig文件,也可以用命令配置一个可以实际使用的高效的Git环 ...
原文: http://chris.beams.io/posts/git-commit/ 介绍:为什么好的commit message很重要 你浏览项目commit message的时候或多或少会有些困 ...
-- 代码昨天还是运行好好的今天就不行了. 代码被删了. 突然出现了一个奇怪的 bug,但是没人知道怎么回事. 如果你出现过上面的任何一种情况,那本篇文章就是为你准备的. 除了知道 git add, ...
git reset HEAD~1 原文来源:https://stackoverflow.com/questions/4850717/how-to-cancel-a-local-git-commit
分支和合并 Git 跟其他版本控制系统最大的优势就在于其高级的分支模型. Git 允许而且 鼓励 你在本地使用多个完全独立的分支.这些分支的创建,合并和删除几乎都可以在几秒内完成. 这意味着你可以轻松 ...
#开篇废话 开篇废话又回来了,离开博客算是有一年了,之间曾经痛下很多次决心,继续写博客,后来都失败了,前年为了申请个CSDN专家,每天发博客,那个高产的状态,现在已然不行了,时过境迁,当时为了吃口饱饭 ...
Git入门:http://rogerdudler.github.io/git-guide/index.zh.html 简洁.实用.高效的学习git基本操作的方式
欢迎访问我的个人博客转发请注明出处:http://www.wensibo.top/2017/03/12/GitOnAS/ 前言 本文较长,图片很多很多,流量党慎入 使用Git已经有一段时间了,但是之前 ...
前言 前情提要:Git应用详解第四讲:版本回退的三种方式与stash 这一节将会介绍本地仓库与远程仓库的一些简单互动以及几款常用的Git图形化界面,让你更加方便地使用git. 一.Git裸库 简单来说 ...
返回某一字符串从另一字符串的右侧开始算起第一次出现的位置. 参数 StringCheck 类型:System.String 必选. 搜索的 String 表达式. StringMatch 类型:Sys ...
占坑 day-1 Gery 和 lll 在火车上谈笑风生 day0 上午 Gery:"我要吊打全场" 下午 Gery 忘带杯子了. Gery:"我过两天碰杯了就可以喝到水 ...
http://acm.hdu.edu.cn/showproblem.php?pid=1064 思路:看懂英文就很简单,就是12个数相加求平均数就ok了. 扩展: C++ 标准输入输出流的控制符 #in ...
笔记: 上周回顾: 模块: 导入模块的顺序 lyl.py # def hhh(): pass name = 'lyl' a.py import lyl import sys from lyl impo ...
1. 安装 nrm 一键切换npm源 npm i nrm -g [安装命令工具] nrm ls [罗列出所有的源] nrm use taobao [使用 ...
今天突发奇想,想给自己的手机分配固定地址,使得接入公司无线网络时每次都取到同一ip地址,这样可以排除认证登录问题. 上网溜达一下,记录下锐捷官方的[常见问题]如下,经验证可行. 需求: 给MAC地址为 ...
Android开发四大组件分别是: 一.活动(Activity): 用于表现功能.二.服务(Service): 后台运行服务,不提供界面呈现. 三.广播接收器(BroadcastReceiver):用 ...
The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such th ...
判断<s:property value="XXX"/> 是否是空字符串 则:<s:if test=" XXX == '' ">< ...
LVM Logical Volume Manager Volume management creates a layer of abstraction over physical storage, a ...