如何在eclipse github pull上发起一个pull request

13825人阅读
GitHub的官方帮助如下:
Fork A Repo:&Using&Pull&Requests:&Merging a&pull&request:&Closing a&pull&request:&Tidying up&Pull&Requests:&
发现这个官方文档写得比较简单,并没有提到开源项目协作方式的一些必要的trick(比如建立topic branch),还有PullRequest的运作细节也没有提到。写个简单的总结补充一下。
Step 1: Fork原项目
这个不解释了,单击一下鼠标就能做到的事情。参见GitHub帮助的。
记得用git remote add添加上游远程库的地址,否则无法追踪上游库的更新。
Step 2: 创建你的主题(topic)branch
这一步非常重要。GitHub的帮助里没有提到创建主题branch的必要性,你当然可以直接在原项目的默认branch(如master)上进行工作,但实际上:
如果打算为原项目作贡献,强烈建议你为每个主题创建一个单独的branch。
举例:如果需要修复原项目的一个和Unicode相关的issue:
$ git branch fix-unicode-error
$ git checkout fix-unicode-error
然后在自己的主题branch(这里是fix-unicode-error)下进行工作。
Step 3: 在主题branch下完成需要的工作
记得push相应的主题branch到GitHub。
*(针对贡献者)rebase还是merge?
从实用的角度来讲,
当你在主题branch下工作,想要导入来自上游库的(与你当前的工作不冲突的情况下)更新时,使用git rebase。
例如,(假设上游branch为upstream/master)
$ git rebase upstream/master fix-unicode-error
或者直接(如果当前branch已经是fix-unicode-error):
$ git rebase upstream/master
这将把当前branch的开发“base(基础)”推进到一个新的起点,而不会引入多余的commits。
当你在某个branch下工作时,git merge可以用来合并来自其他branch的更新。
如果merge的branch来自远程库,一次merge操作会增加一个额外的commit(“Merge branch 'master' of something”)。如果在一个需要发送Pull&Request的主题branch下面进行这种操作,(我个人觉得)这不是一种干净的手段。
当你在主线branch(例如master)下进行开发时,git merge可以用来吸收其他开发branch引入的新特性(包括主项目维护者用来直接merge&Pull&Requests),很恰当。
Step 4: 发送第一个Pull&Request
GitHub的界面:左边选择base branch,右边选择head branch。
base branch:相当于target branch,你希望Pull&Request被merge到上游项目的哪个branch里。
为什么要叫base&branch:base可以理解为你在进行git rebase操作时的那个“base”,也就是你的主题branch所基于的开发base(基础)。
head branch:相当于source branch,你希望自己开发库里的哪个branch被用来进行Pull&Request(当然也就是你的主题branch)。
为什么要叫head&branch:参见下面关于head的定义。
注意head与HEAD(大写)的区别:
head:简单地理解,就是指向某个commit对象的一个reference。它可以是一个branch的名称(例如,默认的master),也可以是一个tag的名称。一个库可以同时有任意多个head。
HEAD:当前活动的head。在任意时刻,存在且仅存在一个HEAD。它可以是指向当前branch的head(比如,指向master,假如master是当前branch的话);也可以不指向任何特定的branch(这叫做detached HEAD)。
系统会从你选择的head branch(在这里,是主题branch)的这个head开始匹配所有不包含在base branch中的commits,然后自动视作你的主题branch相对于base所增加的新特性,放进同一个Pull&Request中提交。
Step 5:&Pull&Request发送之后……
一旦你从自己的主题branch(例如fix-unicode-error)推送了一条Pull&Request,那么在这条Pull&Request被关闭之前,再次向这个branch里push代码,所有的commits都会被自动追加到这个Pull&Request后面(不需要再另开Pull&Request)。
这个功能尤其有用,比如你最初提交的Pull&Request里存在某些问题,项目维护者要求你打回去修改;或者要求你给你的新feature添加一条相应的unit test(这种情况简直太常见了)。只要追加commits到你的这个主题branch中即可。
(题外话:如果原项目有Travis CI,那么它也会在每次追加push之后对Pull&Request重新执行一遍测试)
*(针对项目维护者)cherry-pick、format-patch和am
这几条命令主要针对项目的维护者,稍微提一下。
git&pull和git merge是GitHub上最常用的merge&Pull&Requests的方式,在命令行下merge之后,GitHub上面的PullRequest也会相应地自动关闭。
如果贡献者一次提交了多条commits,有些是维护者并不想要的,可以用这几条命令来选择性地手动commit。(这也适用于某些项目不是借助于GitHub的Pull&Request,而是通过邮件列表和patch文件来进行协作开发的情形)
在这种情况下,GitHub上面的Pull&Request并不能自动关闭,需要维护者手工操作。
Step 6:&Pull&Request关闭之后
如果是已经被merge后关闭的Pull&Request,你可以在页面的最下方找到一个“Delete this branch”的蓝色按钮。
这表明这个主题branch的历史使命已经完成(fix-unicode-error的commit已经被合并到主项目中),可以安全地从远程库中删除了。
在本地库中亦可删除这个branch:
$ git branch -d fix-unicode-error
反之,如果你的主题branch并没有被merge就被维护者关掉的话,你还可以继续再拿它来开新的Pull&Request去骚扰主项目(?0?7▽‘ )。
在哪些情况下可以直接使用master branch来提交Pull&Request:
你只想为主项目贡献某一处代码,贡献完自己的repo就可以扔的那种。你打算为主项目长期贡献代码,而且希望追随原项目的主线开发,不保留自己的特性。你打算为主项目长期贡献代码,默认master branch追随原项目主线,把自己的特性放到别的branch中。
在哪种情况下应该使用主题branch来提交Pull&Request:
想用master branch完全来做自己的开发。在这种情形下:
会从上游库合并更新,但是这些merge本身的commits显然不可能作为返还到上游库的Pull&Request的一部分。存在自己的(未被merge或者不想被merge到上游库的)commits。
鉴于Git的分布式开发哲学,每一个库均可以看作是一个独立的项目,显然是后一种(为每一个新特性建立一个专门的主题branch来向主项目推送Pull&Request)的贡献方式更可取。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1859786次
积分:22091
积分:22091
排名:第211名
原创:348篇
转载:361篇
评论:408条
文章:11篇
阅读:47988
(10)(6)(6)(11)(27)(4)(6)(16)(22)(15)(24)(15)(29)(10)(19)(19)(7)(13)(4)(9)(3)(1)(2)(11)(7)(29)(28)(7)(24)(8)(33)(13)(19)(1)(8)(7)(7)(1)(1)(6)(10)(8)(7)(11)(8)(1)(7)(3)(2)(3)(4)(12)(1)(20)(6)(13)(10)(7)(10)(5)(15)(3)(10)(1)(3)(8)(30)966,690 六月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
关于Pull Request的十个建议
关于Pull Request的十个建议
Author Contacted
相关厂商内容
相关赞助商
ArchSummit深圳2016将于07月15-16日在华侨城洲际大酒店举行,!
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
架构 & 设计
文化 & 方法
<及所有内容,版权所有 &#169;
C4Media Inc.
服务器由 提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司
京ICP备号-7
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?  英文原文:
  GitHub 近期发布了一直以来呼声非常高的特性支持,那就是了缺陷和 Pull Request 的模版。另外,GitHub 的 Web 界面可以直接文件了。
  缺陷和 Pull Request(以下简称 PR)模版是允许项目的维护者为提交者们表单中所展示的缺陷和 PR 自定义一些信息。既可以通过在仓库的根目录下,也可以在 .github 隐藏目录下,加入名称为 ISSUETEMPLATE 或 PULLREQUEST_TEMPLATE 的 Markdown 格式的文件来实现。此特性能够让开发者们更加轻松的定义一些状态,即开发者们期望的一些信息,举例来说,对于 PR,如针对已有的缺陷参考;而对于缺陷,如重现的步骤、期望的描述以及实际的行为等。
  对于 GitHub 的缺陷和 PR 缺乏可定制性的需求是来自于今年 1 月份大量的项目维护者的一份,信中明确了他们。在信公开后的一个月,GitHub 通过重申承诺会解决开发者的麻烦来作出回应,InfoQ 曾报道过此回应,但是响应者寥寥。
  在 InfoQ 的一次声明中,GitHub 掌管开源的头 Brandon Keeper 作了如下的澄清:
缺陷和 Pull Request 的模版仅仅是众多特性的先行者,GitHub 正在努力的探索更多的途径来让满足开源项目的维护者们,以及能够在 GitHub 上构建强大的社区。
  此次更新除了缺陷和 PR 模版之外,GitHub 还增加了一项看似毫无关系的特性,那就是为其 Web 用户界面增加了让开发者。而在此之前,GitHub 的 Web 用户界面仅能够创建文件,需要上传时只能在命令行下完成。在Github和Git上fork之简单指南_Linux教程_Linux公社-Linux系统门户网站
你好,游客
在Github和Git上fork之简单指南
来源:Linux中国&
作者:Linux
以我的经验来看,刚接触Git和GitHub时,最困扰的一件事情就是尝试解决下面的问题:在Git和GitHub上,我能做什么?
Git教程往往不会解决这个问题,因为它集中篇幅来教你Git命令和概念,并且不认为你会使用GitHub。一定程度上弥补了这一缺陷,但是它每篇文章的关注点都较为狭隘,而且没有提供关于"Git vs GitHub"问题的概念性概述。
如果你是习惯于先理解概念,再着手代码的学习者,而且你也是Git和GitHub的初学者,我建议你先理解清楚什么是fork。为什么呢 ?
Fork是在GitHub起步最普遍的方式。
Fork只需要很少的Git命令,但是起得作用却非常大。
Fork提供了对Git和GitHub最基础的了解,有益于你之后的工作。
本篇指南使用两张简单的图表,来教会你fork的两种主要工作流程。我并不打算涉及任何代码,但是在结论中,我会把你需要使用的代码的链接给你。
fork并且更新一个仓库
现在有这样一种情形:有一个叫做Joe的程序猿写了一个游戏程序,而你可能要去改进它。并且Joe将他的代码放在了GitHub仓库上。下面是你要做的事情:
fork并且更新GitHub仓库的图表演示
Fork他的仓库:这是GitHub操作,这个操作会复制Joe的仓库(包括文件,提交历史,issues,和其余一些东西)。复制后的仓库在你自己的GitHub帐号下。目前,你本地计算机对这个仓库没有任何操作。
Clone你的仓库:这是Git操作。使用该操作让你发送"请给我发一份我仓库的复制文件"的命令给GitHub。现在这个仓库就会存储在你本地计算机上。
更新某些文件:现在,你可以在任何程序或者环境下更新仓库里的文件。
提交你的更改:这是Git操作。使用该操作让你发送"记录我的更改"的命令至GitHub。此操作只在你的本地计算机上完成。
将你的更改push到你的GitHub仓库:这是Git操作。使用该操作让你发送"这是我的修改"的信息给GitHub。Push操作不会自动完成,所以直到你做了push操作,GitHub才知道你的提交。
给Joe发送一个pull request:如果你认为Joe会接受你的修改,你就可以给他发送一个pull request。这是GitHub操作,使用此操作可以帮助你和Joe交流你的修改,并且询问Joe是否愿意接受你的"pull request",当然,接不接受完全取决于他自己。
如果Joe接受了你的pull request,他将把那些修改拉到自己的仓库。胜利!
同步一个fork
Joe和其余贡献者已经对这个项目做了一些修改,而你将在他们的修改的基础上,还要再做一些修改。在你开始之前,你最好"同步你的fork",以确保在最新的复制版本里工作。下面是你要做的:
同步GitHub fork的图表示意图
从Joe的仓库中取出那些变化的文件:这是Git操作,使用该命令让你可以从Joe的仓库获取最新的文件。
将这些修改合并到你自己的仓库:这是Git操作,使用该命令使得那些修改更新到你的本地计算机(那些修改暂时存放在一个"分支"中)。记住:步骤1和2经常结合为一个命令使用,合并后的Git命令叫做"pull"。
将那些修改更新推送到你的GitHub仓库(可选):记住,你本地计算机不会自动更新你的GitHub仓库。所以,唯一更新GitHub仓库的办法就是将那些修改推送上去。你可以在步骤2完成后立即执行push,也可以等到你做了自己的一些修改,并已经本地提交后再执行推送操作。
比较一下fork和同步工作流程的区别:当你最初fork一个仓库的时候,信息的流向是从Joe的仓库到你的仓库,然后再到你本地计算机。但是最初的过程之后,信息的流向是从Joe的仓库到你的本地计算机,之后再到你的仓库。
我希望这是一篇关于GitHub和Git 的 有用概述。现在,你已经理解了那些概念,你将会更容易地在实际中执行你的代码。GitHub关于fork和的文章将会给你大部分你需要的代码。
如果你是Git的初学者,而且你很喜欢这种学习方式,那么我极力推荐书籍的前两个章节,网上是可以免费查阅的。
如果你喜欢视频学习,我创建了一个(总共36分钟),来向初学者介绍Git和GitHub。
GitHub 使用教程图文详解&
如何在 GitHub 建立组织
GitHub Linux下使用方法
Windows下Eclipse搭建GitHub开发环境图文教程
本文永久更新链接地址:
相关资讯 & & &
& (05月11日)
& (04月26日)
& (05月29日)
& (05月03日)
& (03月30日)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
如何在github上发起一个pull request
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 github fetch pull 的文章

 

随机推荐