知乎https://www.zhihu.com/question/20431718
github标准pull request提交流程
1、fork开源项目的分支。
2、这时候自己的项目里面多了一个工程。这个工程是原项目的拷贝,你可以在这个项目里面做任意你所需要的修改,因为修改的只是一个拷贝工程,所以不会影响原项目。
流程:选择Clone or download,拷贝链接,
使用命令:git clone xxx(链接)到本地。这个项目就是上面所说的项目拷贝。
3、这时候我们就会有需求了。如果我们fork的项目有更新怎么办呢?我们拷贝的只是一个原版,后面更新的内容自然是没有的。
如果你说重新再fork这个项目的话,自然也是没有问题的,只不过这样是不是有点太low了,而且如果我们在fork的项目里面做了改动呢?
解决方式是添加远程分支:
git remote add upstream https://github.com/alibaba/freeline //添加远程分支,upstream名字自定义
git fetch upstream//拉取远程分支。
切换到想要更新的目录,合并分支
git merge upstream/master //把远程分支的master分支合并到当前分支,这样远程项目中的修改就合并到了本地。
4、最后,我们的需求是修改了内容,想要合并到人家的分支上了。
一般来说,别人合并分支是希望有一个干净的提交,即如图这样的提交。自己的commit基于远程项目最新commit之后。
所以目前比较推荐的做法是新创建一个分支,拉取fork项目的最新代码,但是把自己的提交cherry-pick到这个分支上。最后push到自己的fork项目中,最后申请pull request。
流程:
git checkout -b mmmmm_master upstream/master//创建新分支,并指向fork项目的master分支
git checkout mmmm_master//切换到原有的分支中,这个分支中存储着我们修改的内容的commit。
git log//查看commit,copycommit
git checkout mmmmm_master//切换回新分支
git cherry-pick 0b0eadf36e22e6f682c852458a379b0acd93cdf2//把提交拉取到新分支
git branch -vv//查看一下分支对应情况,确保push的分支指向是对的。
git push origin mmmmm_master//推送分支到自己fork的项目中。
最后一步,打开网站,切换到最新分支,点击New pull request,填写内容,申请就好了。
收尾工作:
我们提交了之后这个分支其实就没有什么用处了。我们可以删掉这个分支:
git push origin :mmm_master