迈入开源世界的第一步:GitHub PR
狐饼 Lv1
本文距离上次更新已过去 0 天,部分内容可能已经过时,请注意甄别。

前言

近期在搞毕设,学了制作仿 ChatGPT 对话界面,想着找找还有没有其他实现的方法,在 GitHub 上搜相关项目的时候,找到一个自己觉得可以 PR 的项目,遂记录本人第一次 PR 过程。

PR流程

在网上找了很多关于 PR 的教程,大概可以分为以下几个步骤:

  1. 先 Fork 别人的项目到自己的仓库里
  2. clone 到本地进行修改,修改的时候不会影响到别人的仓库,可以放心修改
  3. 修改完后,push 回自己的仓库
  4. 如果一切就绪,那么就可以提交 PR 请求
  5. 当作者认同你的修改,那么他就会将你的代码合并到 master 上,然后自己也会成为这个项目的 contributor。

正式开始

Fork 项目

首先 Fork 打算提交 PR 的项目到自己仓库里。

image

image

Clone 到本地进行修改

在本地电脑找了个方便修改项目的地方,打开 Git Bash 或者命令行,用以下命令在本地克隆项目的代码库:

1
git clone <repository-url>

这样就能在本地拥有项目的代码了。

创建分支

在本地创建一个新的分支来进行开发工作。

PS:虽然第一个 PR 从 main 提交完全没有问题,但是如果需要同时提交2个 PR ,新建分支更好工作。

1
git checkout -b <branch-name>

这个命令是在本地创建一个新的分支,并且切换到这个分支。

可以在这个新分支上进行代码修改和开发。

更新本地代码

在每一次写代码之前,都需要确认本地分支的代码是最新的,不然提交的时候有别人先提交会冲突。

更新本地 main 代码:

1
2
3
4
5
6
7
git fetch upstream
git checkout main
git rebase upstream/main

# 更新分支的
git checkout <branch-name>
git rebase main

这里因为我使用的是命令行进行 git clone ,然后使用 git bash 进行更新本地 main ,出现了以下情况。其原因是:Git 在本地仓库配置中找不到远程仓库信息。

1
2
3
4
5
6
$ git fetch upstream
fatal: 'upstream' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

这时候先查看配置的远程仓库名称以及它们对应的抓取 (fetch) 和推送 (push) URL

1
2
3
$ git remote -v
origin https://github.com/iFoxQvQ/cloud-web.git (fetch)
origin https://github.com/iFoxQvQ/cloud-web.git (push)

再手动添加 upstream 远程仓库

1
$ git remote add upstream https://github.com/iFoxQvQ/cloud-web.git

此时进行更新就没有问题了。

解决问题参考的帖子:GitHub - Git 错误 - Stack Overflow

1
2
3
$ git fetch upstream
From https://github.com/iFoxQvQ/cloud-web
* [new branch] main -> upstream/main

写代码

写代码写代码写代码

Commit 和 Push

写完代码后,使用以下命令将代码提交到远程仓库:

1
2
3
git add .
git commit -s -m "Commit message"
git push origin <branch-name>

代码提交到远程仓库后,可以在 GitHub 上创建一个新的 PR 了。

打开自己 Fork 的仓库页面,在页面上方选择 “ Pull requests ” ,然后点击 “ New pull request ” 按钮。

image

image

选择修改的分支来进行提交。

image

然后进行修改 PR 标题和描述内容。完成后点击 Create pull request 按钮。

image

这样就可以创建一个新的PR了,然后就是等作者同意合并了。

可能会遇到的问题

reviewers 提出修改意见

提交 PR 很多时候会因为各种各样的问题不会被马上合入,Reviewers 会提出修改意见。这时可以返回去继续根据意见修改代码,然后通过执行和第一次 Commit 一样步骤的命令,GitHub 会自动把新增的 Commits 全部追加到一个未合入 PR 里去。

PR 产生冲突

每次写代码前应更新本地代码,尽量避免这种情况。但有时候 PR 被阻塞了一段时间,可能别人修改了一行代码,被抢先合入,这时候 PR 就出现冲突了。

现在本地执行:

1
2
3
4
5
6
# 先切回到 main 分支
git checkout main
# 拉取上游代码
git fetch upstream
# 更新本地 main
git rebase --hard upstream/main

本地的 main 分支就和远程的代码完全一致了,然后将 main 分支代码合入自己的分支,同时解决冲突。

1
2
git checkout <branch-name>
git rebase main

冲突部分内容一般会像以下这样:

1
2
3
4
5
6
7
1 <<<<<<< HEAD
2 Text 1.
3 Text 2 changed by me.
4 =======
5 Text 1 changed by other.
6 Text 2.
7 >>>>>>> from upstream/master

将其修改为你认为最好的结果。例如以下三种:

1
2
1 Text 1 changed by other.
2 Text 2 changed by me.
1
2
1 Text 1 changed by other.
2 Text 2.
1
2
1 Text 1.
2 Text 2 changed by me.

然后保存文件,再进行第一次 PR 操作即可。

1
2
3
git add .
git commit -s -m "Commit message"
git push origin <branch-name>

这里我推荐一个练习自己解决 PR 冲突的课程,自己看后觉得挺不错的。

使用 GitHub 上的合并冲突解决解决竞争性提交 - Training | Microsoft Learn

修改少量代码

记起之前部署 my-neuro 项目的时候遇到的 bug ,在评论区也看到很多人遇到这个问题,当时忘记 PR 了。

直接在原仓库找到想要修改的文件,然后选择修改。

image

修改完毕后提交修改

image

image

这样节省了很多时间,不需要去 clone 原项目。

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务
总字数 6.2k 访客数 访问量