如何优雅的在GitHub上贡献代码
基于GitHub仓库进行代码贡献操作步骤。
Fork代码
访问原始仓库,点击fork,将原始仓库代码fork到自己的GitHub账号下,成为副本仓库。
Clone副本仓库到本地
把fork后的副本仓库 clone 到本地。
git clone git@github.com:secbr/nacos.git
这里fork的原创仓库、副本仓库,均为nacos的develop(开发)分支。
创建本地分支
进入仓库目录,使用如下命令创建并切换到dev分支(自己的本地分支)。
git checkout -b dev # 创建并切换到dev分支
本地仓库提交
基于本地分支dev进行代码修改,然后进行本地提交。
相关命令:
git add . # 添加修改文件
git commit -m 'remove the if statement' # 提交 commit
先别着急push,还有问题需要解决。
跟踪原始仓库(upstream)合并
副本仓库的修改不会影响到原始仓库。同样,原始仓库的更新也不会反映到副本仓库。
origin是用来向副本仓库提交更新的远程仓库;upstream,也被称为上游,是专门用来同步原始仓库更新的远程仓库。
查看仓库关联情况命令:
(base) appledeMacBook-Pro-2:nacos apple$ git remote -vv
origin git@github.com:secbr/nacos.git (fetch)
origin git@github.com:secbr/nacos.git (push)
在本地仓库添加upstream:
git remote add upstream git@github.com:alibaba/nacos.git
再次查看关联情况:
(base) appledeMacBook-Pro-2:nacos apple$ git remote -vv
origin git@github.com:secbr/nacos.git (fetch)
origin git@github.com:secbr/nacos.git (push)
upstream git@github.com:alibaba/nacos.git (fetch)
upstream git@github.com:alibaba/nacos.git (push)
关联成功,既有orgin,又有upstream。
如果上游(upstream)更新了很多提交,则可有两种方式拉取并合并上游的更新。
方式一
git checkout develop # 切换到默认存在的develop分支,其他项目可能是master(下同)
git pull --rebase upstream develop:develop # 使用rebase模式拉取upstream/develop上的更新
# 且与本地的develop合并。第一个develop是远程分支,第二个是本地分支。
git checkout dev # 切换到前面建立的dev分支
git rebase develop # 使用rebase模式合并本地的dev和develop分支
方式二
git checkout develop # 切换到develop分支
git fetch upstream develop # 获取upstream上的develop分支
git checkout dev
git rebase upstream/develop # 使用rebase模式合并本地的dev和upstream/develop分支
这里采用第二种方式进行验证。
总的来说,可以把本地的develop(master)分支当作一个只负责从上游获取更新的分支,所有本地的改动都不会直接在develop上面进行。
而是先将上游的develop和本地的develop合并,此时,本地的develop是上游的最新版本;
再通过合并dev和本地的develop来完成本地改动的更新。整个过程在未开始合并之前,你的代码更新应该只会出现在dev分支上。
注意:在使用 git rebase 相关的命令时,需要谨慎应用在已经提交的更新或远程仓库上。
推送(push)到副本仓库
现在,已经完成代码的修改、上游的同步更新并且完成了合并。接下来应该将代码 push 到副本仓库。
git push origin dev # 将本地dev分支的代码push到origin的dev分支
# 如果该分支不存在则会创建
这个 push 只会更新副本仓库,并不会影响到原始仓库。要将代码贡献到原始仓库,还要发起 Pull Request。
发起合并请求(Pull Request)
直接在GitHub网页上发起对应的pull request请求。
新一轮功能修改
上述功能修改完毕,则可删除副本仓库中的dev分支。
新功能的修改,继续重复上面的创建本地分支、修改代码、执行add和commit操作、更新合并upstream(可放在创建分支之前和代码修改过程中的提交变动)、将本地新建分支推送至副本仓库、基于部分仓库创建Pull Request。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接