github pull request
how to use github pull request
1 总览
之前在 CSDN 上写过一篇关于 RP 的笔记 github fork PR 的简单使用 ,那篇文章写的比较随意且不是用命令行操作的,大部分操作都是基于 IDE,所以想着重新整理下那篇文章,同时也复习下 git 常用命令。
2 模拟场景
公司有个项目为 xiao1996cc/git-dev ,有两个开发者,分别为 xiaobinqt 和 lovenarcissus 对这个项目进行开发,开发的新功能都会提交 PR 请求合并。
3 fork
两个开发者分别把项目 fork 项目到自己的账号下,以 xiaobinqt 为例:
xiaobinqt 现在已经 fork 了 xiao1996cc/git-dev 项目到自己的账号下 xiaobinqt/git-dev 。
4 xiaobinqt 开发新功能
每次开发新功能之前一定要先
fetch
下远程仓库。
4.1 clone
xiaobinqt fork 完成后,clone 项目到本地。
4.2 添加远程仓库
添加远程仓库 xiao1996cc/git-dev
git remote add upstream git@github.com:xiao1996cc/git-dev.git
fetch 远程仓库
git fetch upstream
4.3 新建分支并开发
基于 upstream/main 创建新分支 dev_xiaobinqt
git checkout -b dev_xiaobinqt upstream/main
新建新文件 xiaobinqt.txt 并提交
push 成功后再 github 项目下可以看到成功提示
4.4 新建 PR
选择要合并的分支并创建 pull request,这里我们将 xiabinqt/git-dev
下面的 dev_xiaobinqt
分支里的代码合并到 xiao1996cc/git-dev
下的 main
分支。
4.5 合并 PR
xiao1996cc/git-dev
项目下的 PR 只有管理这个项目的用户才有权限处理。管理员看到的界面是如下这样的:
处理完的 PR 状态会变成 Merged
至此 xiaobinqt 开发的一个功能已经成功提交到远程 upstream 仓库,也就是 xiao1996cc/git-dev
仓库,虽然只新建了一个文件,但是一个完整的 pull request 流程。
5 lovenarcissus 开发新功能
对于 lovenarcissus
开发者来说,也是先 fork 项目再 clone 项目到本地。
可以看到 lovenarcissus
fork 后的项目是有 xiaobinqt.txt 这个文件的,同时也验证了 xiaobinqt 开发者成功向远程仓库提交了代码。这里默认已经 clone 到了本地仓库。
5.1 添加远程仓库
fetch 远程仓库代码
5.2 新建分支并开发
基于 upstream/main
创建新分支 dev_lovenarcissus
开发分支
git checkout -b dev_lovenarcissus upstream/main
新建 lovenarcissus.txt 文件并修改 xiaobinqt.txt 文件
提交代码
5.3 新建 PR
5.4 合并 PR
6 模拟并解决冲突
6.1 出现冲突
现在开发者 xiaobinqt 和开发者 lovenarcissus 都提了代码到远程仓库 xiao1996cc/git-dev
,仓库里文件如下:
现在开发者 xiaobinqt 需要开发一个新的功能,新增一个 xiaobinqt2.txt 文件,并且修改 xiaobinqt.txt 文件,但是这时 xiaobinqt 并没有 fetch 合并远程仓库的代码,xiaobinqt 本地仓库文件如下:
直接新建 xiaobinqt2.txt 文件,并且修改 xiaobinqt.txt 文件
push 代码到远程仓库,并创建 pull request
可以看到在创建 pull request 时出现了冲突,提示 Can’t automatically merge ,
6.2 解决冲突
出现冲突的原因是本地代码跟 origin 仓库的代码是一样的,但是 origin 仓库跟 upstream 仓库代码不一致。我们需要先 fetch 下 upstream 仓库的代码跟本地代码合并后再 push 到 origin 仓库,再从 origin 仓库提 pull request 到 upsteam 仓库。
由👇图可知,在 merge upstream/main 分支时出现了冲突 Automatic merge failed; fix conflicts and then commit the result.
vim 打开冲突文件 xiaobinqt.txt 解决冲突
解决冲突后的文件 👇
以下👇是解决这次冲突的具体步骤:
6.3 重提 PR
这时对于 xiaobinqt 开发者来说,冲突已经解决,可以重新提 pull request 👇,可以看到现在的状态是 Able to merge.。
创建新的 pull request 成功