git提交PR

本文最后更新于 2024年7月9日 晚上

本文背景

期末考完想向学长的资料公开仓库贡献一些资料,顺便帮助建设一下混个contributor当当。但是只在自己的大小号上实践过PR(pull request)操作的我头一次向别人的repo (repository)提交PR,遂记录过程中遇到的问题和解决方法,倒逼自己搞清楚其中原因。同时也作为提交PR的教程作参考。

本文关于git操作的说法偏向浅显易懂,稍有啰嗦,如有原理性错误,烦请批评指正,联系方式见关于页

问题描述

  1. 我在GitHub上fork了别人的仓库,然后将fork的仓库pull到本地进行修改,修改后push到fork的仓库的master分支,然后又在github上直接在main分支上新增了内容,请问我该如何将远程仓库的main上的新内容和远程仓库上master分支的内容融合,两个内容并无重合,都是新内容。如何合并分支并提交PR?

  2. 我在本地又修改了文件,在main分支上commit了该修改,并push到远程仓库上,但是并未发生改变,我更新了远程仓库,然后在main分支fetch了,随后发现本地修改的文件又回到了原状,于是重新修改,并切换到master分支add和commit,在切换回main分支并fetch和pull之后,merge时提示冲突,应该如何解决?

提交PR前的准备工作

提交PR首先得先改好才能交 ## fork目标repo 进入目标repo的首页,即页面栏显示Code字样、域名末尾为repo名称的页。

点击fork,将在自己的名下新建一个同名repo,相当于把对方的repo复制到了自己名下,这样就可以任意修改内容而不至于对原repo的内容造成影响,并且,只有fork了才能向原仓库提交PR。 ## 拿到本地进行修改 这时名下已经有了一个同名repo,在本地新建个文件夹用来装这个repo的内容,在这个文件夹里打开git bash,在fork来的repo里复制链接,git pull到本地。

若读者尚未将git与github绑定,请参见:

此时可用git branch查看当前分支,大概率是master,因为git pull只给远程分支不给本地分支名默认为master

git remote -v查看当前远程分支,如果没有,就git remote add BRANCH_NAME URL添加,url就是repo的链接,BRANCH_NAME就是远程分支的名字,一般设置成origin

然后就可以开始在本地修改内容啦!

修改完提交到远程仓库

修改完后,再回到git bash,git add .git commit,可用git status查看跟踪(add)和提交(commit)的状态。

git push origin master,就当你的远程分支名字是origin,将分支master提交到origin分支上去,即上传到远程仓库。

提交PR

此时回到fork来的repo,点击contribute,会显示当前已经领先原repo多少个commit,直接open pr,描述一下修改内容,点击提交就成功提交了PR。

问题1解决过程

问题1可对应到实际场景中自己工作完成慢了,别人先交了PR过了,自己还得去迎合别人的分支,解决完冲突才能提交。

我在本地修改完后还未提交前,在远程仓库上直接做了修改,这导致我的远程仓库除了我本地修改的内容外,还有其他内容与本地master分支不一样,所以不能直接push

先在本地再创建一个main分支git checkout main,然后将最新的远程仓库pull到main分支,在本地合并main和master分支 git merge master

由于master和远程分支origin修改的地方不同,所以不会有冲突,直接merge成功,然后在main分支上再add、commit、push。

其实也可以将main融进master中,使master始终最新,方便进一步修改。

问题2解决过程

问题2对应到实际场景中提交了PR结果被打回重造,这期间又有人交了PR还过了,不得不再去融合别人的分支,可恨的是这个人和你修改的文件还是同一个,还不能直接merge。

仍然在main中pull最新的远程仓库,如果是fork来的,还要先在github上同步。

然后git merge,会显示冲突的文件,在本地打开文件(推荐使用vscode等支持git的IDE,会高亮显示冲突),找到冲突的地方,会有明显的标志,类似于:

1
2
3
4
5
<<<<<<< HEAD
// changes from main branch
=======
// changes from master branch
>>>>>>> master
这时需要选择采用当前的分支、采用另一个分支还是融合内容,融合好后才能merge。之后就一般流程:add、commit、push。


git提交PR
https://novelyear.github.io/2024/07/08/记一次git分支合并经历/
作者
Leoo Yann
更新于
2024年7月9日
许可协议