Pull Request和Pull是两码事。
自己的仓库或者自己具有管理权限的仓库,可以直接clone,pull,修改,push;别人的仓库,必须先fork成自己的仓库,然后再clone,pull,修改,push,最后再pull request。
6.1 Pull Request的概要
Pull Request是自己修改源代码后,请求对方仓库采纳该修改时采取的一种行为。
6.2 发送 Pull Request前的准备
Branch
要养成创建特性分支之后再修改代码的好习惯
在GitHub上发送Pull Request时,一般都是发送特性分支。这样一来,Pull Request就拥有了更明确的特性(主题)。让对方了解自己修改代码的意图,有助于提高代码审查的效率。
查看clone出的仓库的分支
开头加了“remotes/origin/”的是GitHub端仓库的分支。
网站中显示的HTML位于/origin/gh-pages分支。虽然通常情况下最新版代码都位于master分支,但由于本次我们使用了GitHub Pages,所以最新代码位于gh-pages分支。
git branch -a
创建自己的特性分支
在clone出的仓库中,创建自己的特性分支,用于提交自己修改的代码。
git checkout -b branch-name
添加代码
在clone出的本地仓库中,添加自己的代码。
提交修改
用git diff命令查看修改是否已经正确进行。
git diff
确认修改后,提交至本地仓库。
git add file-name
git commit -m "My commit information"
创建远程分支
要从GitHub发送Pull Request,GitHub端的仓库中必须有一个包含了修改后代码的分支。现在就来创建本地work分支的相应远程分支。
git push origin branch-name
6.3 发送Pull Request
查看分支间的差别,点击Compare按钮查看。查看时,保证目标仓库及其分支在左边,自己的仓库及其分支在右边。这样发送Pull Request时,才是发送给目标仓库。
确认想要发送的Pull Request的内容差别无误后,请点击Create Pull Request。随后显示的表单用于填写请求对方采纳的评论。
确认没有问题后,点击Create Pull Request按钮。这样一来,Pull Request的目标仓库中就会新建Pull Request和Issue,同时该仓库的管理者会接到通知。
6.4 让Pull Request更加有效的方法
在开发过程中发送Pull Request进行讨论
在GitHub上,我们可以尽早创建Pull Request,从审查中获得反馈。只要在想发起讨论时发送Pull Request即可,不必等代码最终完成。
向发送过Pull Request的分支添加提交时,该提交会自动添加至已发送的Pull Request中。
另外要注意,不要在Pull Request中添加无关的修改。处理与主题无关的作业请另外创建分支。
明确标出“正在开发过程中”
为了防止开发到一半的Pull Request被误合并,一般都会在标题前加上“WIP”字样,表示仍在开发过程中。等所有功能都实现之后,再消去这个前缀。
WIP = Work In Progress
不进行Fork直接从分支发送Pull Request
一般来说,在GitHub上修改对方的代码时,需要先将仓库Fork到本地,然后再修改代码,发送Pull Request。
如果用户对该仓库有编辑权限,则可以直接创建分支,从分支发送Pull Request。团队开发时不妨为每一名成员赋予编辑权限,免去Fork仓库的麻烦。这样,成员在有需要时就可以创建自己的分支,然后直接向master分支等发送Pull Request。
6.5 仓库的维护
对目标仓库(原仓库),在GitHub上进行Fork,然后clone。
git clone git@github.com:自己的用户名/仓库名.git
给原仓库设置名称,例如upstream。
git remote add upstream git@github.com/原仓库所有者用户名/仓库名.git
获取最新数据。从远程仓库实际获取(fetch)最新源代码,与自己仓库的分支进行合并。
git fetch upstream
git merge upstream/master