Git协助方式:Fork项目开发新功能并使用Pull-Request把新特性推送给原项目

Pull Request 是开发者使用 GitHub 进行协作的利器。这个功能为用户提供了友好的页面,让提议的更改在并入官方项目之前,可以得到充分的讨论。

最简单地来说,Pull Request 是一种机制,让开发者告诉项目成员一个功能已经完成。一旦 feature 分支开发完毕,
开发者使用 GitHub 账号提交一个 Pull Request。它告诉所有参与者,他们需要审查代码,并将代码并入 master 分支。
Pull Request 不只是一个通知,还是一个专注于某个提议功能的讨论版

Pull Request是如何工作的

Pull Request 需要两个不同的分支或是两个不同的仓库,

  1. 开发者在他们的本地仓库中为某个功能创建一个专门的分支。
  2. 开发者将分支推送到公共的 GitHub 仓库。
  3. 开发者用 GitHub 发起一个 Pull Request。
  4. 其余的团队成员审查代码,讨论并且做出修改。
  5. 项目维护者将这个功能并入官方的仓库,然后关闭这个 Pull Request。

例子

如何将 Pull Request 用在 Fork 工作流中。小团队中的开发和向一个开源项目贡献代码都可以这样做。

Mary 是一位开发者,John 是项目的维护者。他们都有自己公开的 GitHub 仓库,
John 的仓库之一便是下面的官方项目。

为了参与这个项目,Mary 首先要做的是 fork 属于 John 的 GitHub 仓库。她需要注册登录 GitHub,找到 John 的仓库,点击 Fork 按钮。

选好 fork 的目标位置之后,她在服务端就有了一个项目的副本.

接下来,Mary 需要将她刚刚 fork 的 GitHub 仓库克隆下来.她在本地会有一份项目的副本。她需要运行下面这个命令:

git clone https://github.com/user/repo.git

请记住,git clone 自动创建了一个名为 origin 的远端连接,指向 Mary 所 fork 的仓库。

在她写任何代码之前,Mary 需要为这个功能创建一个新的分支。这个分支将是她随后发起 Pull Request 时要用到的源分支

# 创建新分支
git checkout -b some-feature
# 编辑一些代码
git commit -a -m "新功能的一些草稿"

为了完成这个新功能,Mary 想创建多少个提交都可以。如果 feature 分支的历史有些乱,她可以使用交互式的 rebase 来移除或者拼接不必要的提交。对于大项目来说,清理 feature 的项目历史使得项目维护者更容易看清楚 Pull Request 的所处的进展。

在功能完成后,Mary 使用简单的 git push 将 feature 分支推送到了她自己的 GitHub 仓库上(不是官方的仓库):

git push origin some-branch

这样她的更改就可以被项目维护者看到了(或者任何有权限的协作者)。

Mary创建了一个Pull Request

GitHub 上已经有了她的 feature 分支之后,Mary 可以找到被她 fork 的仓库,点击项目简介下的 New Pull Request 按钮,用她的 GitHub 账号创建一个 Pull Request。Mary 的仓库会被默认设置为源仓库(head fork),询问她指定源分支(compare)、目标仓库(base fork)和目标分支(base)。

Mary 想要将她的功能并入主代码库,所以源分支就是她的 feature 分支,目标仓库就是 John 的公开仓库,目标分支为 master。她还需要提供一个 Pull Request 的标题和简介。


在她创建了 Pull Request 之后,GitHub 会给 John 发送一条通知。

John审查了这个Pull Request


John 可以在他自己的 GitHub 仓库下的 Pull Request 选项卡中看到所有的 Pull Request。点击 Mary 的 Pull Request 会显示这个 Pull Request 的简介、feature 分支的提交历史,以及包含的更改。

如果他认为 feature 分支已经可以合并了,他只需点击 Merge Pull Request 按钮来通过这个 Pull Request,将 Mary 的 feature分支并入他的 master 分支.
但是,在这里例子中,假设 John 发现了 Mary 代码中的一个小 bug,需要她在合并前修复。他可以评论整个 Pull Request,也可以评论 feature 分支中某个特定的提交。

为了修复错误,Mary 在她的 feature 分支后面添加了另一个提交,并将它推送到了她的 GitHub 仓库,就像她之前做的一样。这个提交被自动添加到原来的 Pull Request 后面,John 可以在他的评论下方再次审查这些修改。

John 接受了 Pull Request

最后,John 接受了这些修改,将 feature 分支并入了 master 分支,关闭了这个 Pull Request。功能现在已经整合到了项目中,其他在 master 分支上工作的开发者可以使用标准的 git pull 命令将这些修改拉取到自己的本地仓库。

Git协助方式:Fork项目开发新功能并使用Pull-Request把新特性推送给原项目相关推荐

  1. 软件项目开发模式_小晓_同学__新浪博客

    螺旋开发模式:部分模块开发还可以再继续开发别的模块,适合于项目前期需求不确定的情况 对于每一个模块一个个开发:分析.设计.编码.测试.上线: 好处:有效的降低软件项目风险,(做出的产品要尽量满足客户需 ...

  2. git实现审核功能_使用 Pull Request 功能进行代码审查

    如果你的团队采用了 Gitee 推荐的"Fork + Pull"协作模式,我们同时推荐通过Pull Request这个功能来进行团队中的代码审查,有如下步骤: 1.仓库管理员 设置 ...

  3. python人工智能项目开发实例-人工智能学习路线图,整理近200个实战案例与项目...

    Created by 唐宇迪 人工智能实战就业(面试)学习路线图 这个项目是干什么的? 整理这个项目的初衷是方便同学们快速开启人工智能自学计划,在学习过程中少走弯路用最快的效率入门Ai并开始实战项目, ...

  4. python项目开发案例集锦_在线分享 | 在 VS Code 中一站式完成 Python 项目开发

    往期活动回顾 VS Code 中文社区自成立以来,已经举办了4场活动: Workshop | First Step to VS Code 基础篇 Workshop | First Step to VS ...

  5. 使用“快速信息分发“功能将Excel表格中的信息点对点推送给员工(转)

    前言 在工作中经常会遇到需要将一些信息手动点对点分发给员工的情况.例如,部门管理员每月从绩效考核系统中将员工的绩效考核情况导出后,通过企业微信或电子邮件点对点发给部门的每位员工.为了满足这类需求,在E ...

  6. 如何在github上发起一个pull request,如何贡献代码,参与开源项目

    点击页面右上角的 "fork" ,把你关注的项目fork到你自己的账号下了. 把项目克隆到本地 修改并push 回到你的github界面,发起请求: 在自己fork的库处新建请求: ...

  7. 项目开发--高级功能汇总

    祭奠曾经逝去的青春-- 1.高级功能汇总-->Memcached之ASP.NET实现 2.高级功能汇总-->HubbleDotNet软件安装 转载于:https://www.cnblogs ...

  8. android l 新功能,Android L怎么样 安卓L新特性汇总

    在刚刚结束的2014谷歌IO大会上,谷歌共发布了8款新品,其中Android L成为发布会的一大看点.此次谷歌并没有将新安卓系统命名为Android 5.0,而是命名为Android L.仅从命名来看 ...

  9. html5表单新功能解析,解析HTML5表单新功能-HTML5

    本文我们将详细介绍一下HTML 5中对表单功能的更新.希望能帮助更多的前端人学习这门毋庸置疑是新趋势的技术. 一.表单结构更自由 XHTML中需要放在form之中的诸如inpu/button/sele ...

最新文章

  1. __cplusplus的用处
  2. Linux操作系统Ubuntu部署Mysql篇
  3. 落地华东总部、上线创新云、签约AIoT产业基金……京东云南京“新动作”
  4. 我的硬盘居然被win10安装工具_安装win10无法识别硬盘,你需要这样做!网友:涨知识了...
  5. springboot+flowable第二节(流程基本操作)
  6. Hadoop序列化与Java序列化
  7. eclipse的简介安装与配置
  8. 使用nvl就不能groupby了吗_现在的手机大部分都不能换电池,使用1至2年就需要更换吗?...
  9. Spring Boot + PageHelper 实现分页,总结得很全了!
  10. python2和python3中的map()
  11. AI头发笔刷_1500款设计字体,海量PS笔刷,icon模板免费送!还为设计发愁吗?
  12. 根据经纬度和日期计算日出日落时间
  13. CTPN论文翻译——中英文对照
  14. ios微信浏览器扫码进入页面加载完成失效
  15. saiku 展示优化第二步(要诀和技巧)
  16. kali 镜像下载(免费下载)
  17. Error on rename ofXXXXXX (errno: 152)
  18. Bonferroni校正
  19. 如何在Windows下统计代码行数
  20. ARM7开发板模拟器Skyeye安装设置全攻略

热门文章

  1. ASP.NET(c#)如何判断浏览器是否支持cookies
  2. 设计: 未来Web设计的7大趋势
  3. HTML5+CSS3实现的响应式垂直时间轴
  4. 并查集——最小连接路径和Kruskal(hdu1301)
  5. 搭建php docker环境日记
  6. 机器学习速成课程 | 练习 | Google Development——编程练习:逻辑回归
  7. 如何用Pygame写游戏(一)
  8. Kubernetes-Pod(三)
  9. 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
  10. 【C++】错误处理和异常处理