基于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。



如何优雅的在GitHub上贡献代码插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://www.choupangxia.com/2021/09/08/github-pr/