git提交PR
本文最后更新于 2024年7月9日 晚上
本文背景
期末考完想向学长的资料公开仓库贡献一些资料,顺便帮助建设一下混个contributor当当。但是只在自己的大小号上实践过PR(pull request)操作的我头一次向别人的repo (repository)提交PR,遂记录过程中遇到的问题和解决方法,倒逼自己搞清楚其中原因。同时也作为提交PR的教程作参考。
本文关于git操作的说法偏向浅显易懂,稍有啰嗦,如有原理性错误,烦请批评指正,联系方式见关于页。
问题描述
我在GitHub上fork了别人的仓库,然后将fork的仓库pull到本地进行修改,修改后push到fork的仓库的master分支,然后又在github上直接在main分支上新增了内容,请问我该如何将远程仓库的main上的新内容和远程仓库上master分支的内容融合,两个内容并无重合,都是新内容。如何合并分支并提交PR?
我在本地又修改了文件,在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