如何为 Github 开源项目贡献代码
什么是 pr(pull request)
“Pull Request 是 github 的一种通知机制。你修改了他人的代码,将你的修改通知原来的作者,希望他合并你的修改,这就是 Pull Request。”
一、fork 原作者的项目
假设 someone 有个项目 demo
由于没有对 demo 的直接 push 权限,我们需要先对 demo 库进行 fork,然后从自己的地址 clone。
git clone git@github.com:yourname/demo.git
someone
二、与原作者仓库进行拉取和推送关联
为了保证我的代码和原作者实时同步(原作者的改动我们也能拉取,我们的修改也能推送到原作者仓库),需要进行 关联。
clone 项目到本地后,进入 demo 目录,添加一个新的推送地址,取名叫 upstream(代表原作者的仓库) 。
cd ~/demo
git remote add upstream git@github.com:someone/demo.git
使用 git remote -v
查看此时有两个推送和拉取地址。
origin git@github.com:username/demo.git (fetch)
origin git@github.com:username/demo.git (push)
upstream git@github.com:someone/demo.git (fetch)
upstream git@github.com:someone/demo.git (push)
三、切换 dev 分支
根据原作者的说明,一般需要在 dev 分支进行修改和提交 pr。
先查看远程仓库里有哪些分支 git branch -r
origin/HEAD -> origin/master
origin/develop
origin/master
upstream/develop
upstream/master
切换到 develop 分支,并跟踪远程分支。
git checkout –track origin/develop
--track
参数的作用是,下次 push 的时候直接推送到与你关联的远程分支上,不用再次指定了。否则会推送到 HEAD 指定的分支上。 也可以直接用-t
参数
当前也许你 clone 之后好几天没动代码,此时原作者仓库可能已经有变动了,如果想拉取原作者的变动,那我们可以使用 git fetch upstream
命令
使用 git
终端切换分支需要敲很多命令,推荐使用 gui 程序拉取和切换分支,比如 sourcetree
。
四、修改代码并提交
git add -A
git commit -m “你提交的说明”
git push
# 如果 checkout 的时候没有 -t 参数,那么 push 的时候需要指定远程分支名称
# git push origin develop
五、填写 pr 的说明
到 github 项目的仓库地址即可查看到有 pr 可以填写,一般需要填写为什么改动,改动了哪些地方等信息,填写完之后保存,原作者即可收到合并提交的请求,如果他同意,那么你的代码将会合并。
六、仅提交部分修改到上游仓库
# 先 commit && push
git add xxx xxx2 && commit -m "xxx" && git push
# 切换分之前先与远程分之同步代码
git fetch upstream master
git checkout -b newFeatureBranch upstream/master
git cherry-pick a3e62375
git commit -m “cherry-pick test”
# 有可能有冲突,解决冲突。
git push origin newFeatureBranch
# 然后在 GitHub 页面上提交 pr