最近为一个开源项目提交了一个PR, 但对这个流程很是模糊,于是学习了如何在github上较为规范的提交PR,以及如何合并用户提交的PR
如果我们要提交一个PR,那么首先需要找到一个厂库,就比如这么一个仓库
1、 首先fork仓库,就是把别人的仓库,copy到自己的仓库中
2、 clone到本地,并进行一些配置工作
#! 注意 1、clone自己的仓库
https://github.com/linzhe141/learn-github.git
#! 注意 2、将被fork的仓库添加为本地仓库的上游(upstream)版本库。用于与远程仓库(被fork的仓库)保持同步
git remote add upstream https://github.com/linzhe-tools/learn-github.git
在开始写代码前,我们要保证我们的代码都是最新的,要不容易发生冲突(有可能在你fork后,源仓库的管理者又进行了代码提交),
并且提交PR时,如果有冲突,必须解决冲突,这个需要提PR的开发者自行解决,建议使用rebase
合并
git fetch upstream
git rebase upstream/main # 采用了rebase的方案
因为有可能这个仓库会不止提交一个PR,那么需要为每一个PR新建一个分支tips:github的一个PR是关联一个分支的
git checkout -b feat_test
写完PR代码后,进行提交
git add .
git commit -m "feat: 新增bar功能"
git push origin feat_test
当前代码有可能有一些没有啥意义的日志,比如一些删除了console.log()等调试代码,可以使用git rebase -i
压缩一些无用的日志记录,
这样可以让git log
的记录更纯粹一点
1、比如这么一个场景,我们在这个feat_test
分支,新增了如下一个文件,并进行了一次提交feat: 新增bar功能
export function bar() {
return 'bar'
}
2、然后我们又进行了一次提交,这次提交单纯只是一个日志打印feat: test1
export function bar() {
return 'bar'
}
// 这次提交新增
console.log(bar)
3、然后我们又又进行了一次提交,这次提交单纯只是一个日志打印feat: test2
export function bar() {
return 'bar'
}
// 这次提交新增,修改bar为bar()
console.log(bar())
4、然后我们又又又进行了一次提交,我们删除了调试日志的代码feat: test3
export function bar() {
return 'bar'
}
// 这次提交新增,删除了打印日志的代码
5、然后我们又又又又进行了一次提交,我们在readme文件中,新增了bar函数的介绍docs: 补充bar功能文档
import { bar } from './bar'
bar() // bar
其中的test1,test2,test3
日志其实并没有实际意义,只是单纯的日志调试代码,没有任何用途
a、我们可以通过git rebase -i HEAD~5
将最近的五次提交进行调整进行调整,整个过程都在vim模式下
进行
b、我们可以将test1,test2,test3
这3个commit进行压缩并融入到feat: 新增bar功能
commit中
c、然后重新调整压缩后的日志commit message,删除test1,test2,test3
日志commit message,
这样日志记录就会变得优雅一些
建议直接-f
,因为这是自己的开发分支(只有自己使用),并且有可能会进行rebase -i
等操作,需要冲掉远程旧的 commits 记录。
git push -f origin feat_test
当把这个feat_test
分支push到fork的远程仓库后,我们主页的仓库主页就会出现一个PR的的快捷入口Compare & pull request
,
当然也可以去被fork原始仓库的Pull requests
板块进行创建PR,这里采用第一种方案
点击后就会出现如下页面,包括一些基本信息,如新分支的commits和一些描述这个pr的文字信息,
以及将当前的哪个分支合并到原始仓库的哪个分支,比如现在我们想把自己的feat_test分支合并到原始仓库的main分支上
,
然后点击Create pull request
即可,至此我们已经成功创建了一个PR,现在只需等待Reviewer来审核
如果Reviewer没有直接合并给了一下建议,或者存在冲突,我们可以直接再次在这个分支进行修改并提交, PR会自动更新(上文已经提到github的一个PR是关联一个分支的),等待Reviewer再次审核
作为管理者,可以在Pull requests
板块中,找到刚刚创建的PR就可以审核这个PR,
这里有三种合并模式,可根据自己需求选择,这里我选择第3种Rebase and merge
,
tips: 为什么这里的commit只有一个?是因为上面的PR存在了冲突,我解决冲突后又再次提交
当被成功合并后,至此我们成功水了一个PR🎉