备注:此博客为转载,方便自己学习进步,原博客地址点击此处
本文介绍如何在GitHub上更新Fork以及PullRequest给源项目。
在GitHub上更新Fork
经常遇到的是Fork一个项目之后,源项目的作者做了新的更改,如果没有同步到我自己的Fork,我所做的更新进行Pull Request后,会产生冲突;因此在更新文件之前、至少是Pull Request之前,应当要更新自己的Fork的。
更新Fork的方法有很多,Git写代码是很好的,当小白通常比较难做,步骤缺了就经常不奏效;所以我自己亲测了一个GitHub上更新Fork的方法,做一个教程,与朋友们共勉;废话少说,步骤如下。
一、进入自己Fork来的项目,按New Pull Request按钮,新建一个Pull Request(简称:PR)。
![](https://i-blog.csdnimg.cn/blog_migrate/659f8d5949fe8c1fd49db760089a5b14.jpeg)
二、如果自己还没有修改过Fork项目的文件,那么此时可以点击switching the base,切换到基于我自己的Fork项目。
![](https://i-blog.csdnimg.cn/blog_migrate/0c39ea4e9d1ea9a18b92b3115e9e0a11.jpeg)
如果已经修改或更新过Fork项目的文件,那么可以通过选择Base Fork和Head Fork来从源项目更新到我自己的Fork项目。
![](https://i-blog.csdnimg.cn/blog_migrate/480034aa98d6ccc1db8704033cf85494.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/9ddb505b5f3165621e4e7a50a5eb94cf.jpeg)
这里有个小技巧:在默认状态下,会是Base源项目,Head我自己的Fork项目;这样选择任何一个时,会调到某个无法更新的页面;解决方法是先Base或Head一个其他人的账号下的Fork,接着选择Head/Base源项目或我自己的Fork项目,这样就不会出现Base和Head都是自己或者都是源项目的情况。
三、Base和Head设置完,就进入Comparing Changes页面,确认一下Base和Head,以及最新的更新内容。
![](https://i-blog.csdnimg.cn/blog_migrate/5e096adc179b1e17a43871ad6b3e1445.jpeg)
内容没问题就Create PR了,即上图绿色箭头所指向的绿色按钮;接着输入主题,Create。
![](https://i-blog.csdnimg.cn/blog_migrate/558e0eeeae5ff5b7dbb69ae814e2a597.jpeg)
四、新Create的PR在哪里可以找到呢?进入我自己的Fork项目,导航条上的PR进入,看到Open的有一个,就是刚才更新的。
![](https://i-blog.csdnimg.cn/blog_migrate/10b7bafdf49f106f10bb9f5c17f76953.jpeg)
点击进入确认一下。
![](https://i-blog.csdnimg.cn/blog_migrate/106d0204d55f4ef0479fe365a8c51412.jpeg)
五、把源项目的更新Merge到我的Fork项目。
![](https://i-blog.csdnimg.cn/blog_migrate/b7c190add0098c0ab6c5bc8bb7bc2b0a.jpeg)
Confirm Merge,确定这个更新;
![](https://i-blog.csdnimg.cn/blog_migrate/c7931703e23363b0e502b784c21f7a1c.jpeg)
可以看到,这个PR已经更新完成,呈紫色的Merge状态。
![](https://i-blog.csdnimg.cn/blog_migrate/264b99d945d155e5c2391afd0e1c1bd5.jpeg)
六、最后验证一下是否更新到最新的项目,因为已知是更新了Pattern Recognition,所以直接进入。
![](https://i-blog.csdnimg.cn/blog_migrate/3bd5a02a99ae0718be3a5588ae2e8456.jpeg)
查看到下面5个是最新修改的,15个小时之前修改了内容。
![](https://i-blog.csdnimg.cn/blog_migrate/4f2ec9e1e341231c16823dc01e934182.jpeg)
至此整个更新Fork的方法步骤已完成,玩得愉快!
将更新的Fork项目PullRequest给源项目
我们Fork项目之后进行了修改或添加新文件,需要Pull Request(简称:PR)给源项目,让作者Merge融入到他的源项目里。
在PR之前,甚至开始修改或创建新文件之前,先看看源项目是否有更新,如有更新,可按第一部分内容,先更新自己的Fork项目,再做创建新文件,老司机说这样冲突比较少。
一、看到别人的好项目,如何“据为己有”?Fork一下咯!
![](https://i-blog.csdnimg.cn/blog_migrate/12725e920c5fdbd03be3a92d09a1da39.jpeg)
点击Fork,会进入Fork进行中的界面;
![](https://i-blog.csdnimg.cn/blog_migrate/808c0b044b7aaf17fef21e989ac4f0bd.jpeg)
Fork完成后,可以在自己的主页(Your Profile)看到Fork的项目。
![](https://i-blog.csdnimg.cn/blog_migrate/1751adf3fddb41e42c6e9f0b23832c1a.jpeg)
二、可以通过Create new file或upload file新建或上传文件,要注意的是:上传的文件会把原来同名文件覆盖掉!
![](https://i-blog.csdnimg.cn/blog_migrate/ec3fbb7ccefd145760363bad740b4e17.jpeg)
这里的会有文件上传的进度条,如下图:共13个文件,已上传9个;上传完成的文件会在下方显示。
![](https://i-blog.csdnimg.cn/blog_migrate/6a3c914f7db0580a01a5606d1f8c7893.jpeg)
这个上传文件由于服务器在国外的缘故,死慢死慢,经常就废了,如下图。
![](https://i-blog.csdnimg.cn/blog_migrate/ff8d31718d39a5c51871faf11b0ed31f.jpeg)
当看到下面这个Processing your files…页面,那就恭喜你了,经过几十次的上传,总算work了;如果出现一片空白的页面,那么只好重复choose your files,再次Confirm Changes。
![](https://i-blog.csdnimg.cn/blog_migrate/3ac97a315e532b025f2c2dbe5fa15c14.jpeg)
三、新建PR:可以在Fork项目的根目录下,或者任意的目录下,Pull Request。
![](https://i-blog.csdnimg.cn/blog_migrate/c5a62ad9ad5d67d174fa6131e8baec0f.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/b4d5bba7cd98ddf397595ebc5c5ec9fa.jpeg)
Pull Request后会进入Comparing changes页面,核对一下Base Fork和Head Fork(蓝色圆圈)、以及更新的内容(紫色方框);由于已经更新过最新的源项目内容,与源项目同步好了,所以此时显示“Able to merge”(红圈绿字);一切就绪,点击Create创建PR。
![](https://i-blog.csdnimg.cn/blog_migrate/95df27a0f4380c89eef76281408d82ae.jpeg)
输入主题,并Create PR;
![](https://i-blog.csdnimg.cn/blog_migrate/70be5e6a883376e02888edae76d69335.jpeg)
这时可以看到已经将这个更新PR给源项目作者,PR序号为#52,状态open。
![](https://i-blog.csdnimg.cn/blog_migrate/37509575d5ac6730b4d3eb97bc9121a1.jpeg)
四、源项目作者Merge此PR,将此次的更改融入到源项目,并形成Commits记录。
![](https://i-blog.csdnimg.cn/blog_migrate/5c77278b2bdb5165a21750b87c499d23.jpeg)
序号#52的PR已经Merge:
![](https://i-blog.csdnimg.cn/blog_migrate/39b413c695ed4ec3f58b455b0877c1f7.jpeg)
进入源项目,查看Commit记录:
![](https://i-blog.csdnimg.cn/blog_migrate/6403651a2c4f62c4a4512d2e051c08f1.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/371dbc5182125ab54888f5c86b162ef0.jpeg)
至此,整个Fork、修改或创建文件、Pull Request以及Merge的步骤已完成,玩的愉快!
作者:黄昱俊,国资企业投资部总经理,主要负责投资部门建设、投资流程管理、投后资源管理。历经10年,从医疗器械研发工程师到投资管理的蜕变,业余尝试ETF量化投资。声明:本文为作者投稿,版权归其个人所有。