logo
blog
readme
Back to Blog
Back to Blog
Back to Blog

‌

‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌

© 2025 linzhe. All rights reserved.

TODO:编辑

github PR 流程

最近为一个开源项目提交了一个PR, 但对这个流程很是模糊,于是学习了如何在github上较为规范的提交PR,以及如何合并用户提交的PR

1、创建仓库(管理者拥有)

如果我们要提交一个PR,那么首先需要找到一个厂库,就比如这么一个仓库

github-pr-process-create-manager-repo

2、fork仓库(自己拥有),并进行一些配置工作

  • 1、 首先fork仓库,就是把别人的仓库,copy到自己的仓库中

    github-pr-process-fork-repo
  • 2、 clone到本地,并进行一些配置工作

    bash
    #! 注意 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
    

3、写PR代码

在开始写代码前,我们要保证我们的代码都是最新的,要不容易发生冲突(有可能在你fork后,源仓库的管理者又进行了代码提交), 并且提交PR时,如果有冲突,必须解决冲突,这个需要提PR的开发者自行解决,建议使用rebase合并

bash
  git fetch upstream
  git rebase upstream/main # 采用了rebase的方案

因为有可能这个仓库会不止提交一个PR,那么需要为每一个PR新建一个分支tips:github的一个PR是关联一个分支的

bash
  git checkout -b feat_test

写完PR代码后,进行提交

bash
  git add .
  git commit -m "feat: 新增bar功能"
  git push origin feat_test

当前代码有可能有一些没有啥意义的日志,比如一些删除了console.log()等调试代码,可以使用git rebase -i压缩一些无用的日志记录, 这样可以让git log的记录更纯粹一点

  • 1、比如这么一个场景,我们在这个feat_test分支,新增了如下一个文件,并进行了一次提交feat: 新增bar功能

    ts
    bar.ts
    export function bar() {
      return 'bar'
    }
    
  • 2、然后我们又进行了一次提交,这次提交单纯只是一个日志打印feat: test1

    ts
    bar.ts
    export function bar() {
      return 'bar'
    }
    // 这次提交新增
    console.log(bar)
    
  • 3、然后我们又又进行了一次提交,这次提交单纯只是一个日志打印feat: test2

    ts
    bar.ts
    export function bar() {
      return 'bar'
    }
    // 这次提交新增,修改bar为bar()
    console.log(bar())
    
  • 4、然后我们又又又进行了一次提交,我们删除了调试日志的代码feat: test3

    ts
    export function bar() {
      return 'bar'
    }
    // 这次提交新增,删除了打印日志的代码
    
  • 5、然后我们又又又又进行了一次提交,我们在readme文件中,新增了bar函数的介绍docs: 补充bar功能文档

    ts
    import { bar } from './bar'
    bar() // bar
    

其中的test1,test2,test3日志其实并没有实际意义,只是单纯的日志调试代码,没有任何用途

  • a、我们可以通过git rebase -i HEAD~5将最近的五次提交进行调整进行调整,整个过程都在vim模式下进行

    github-pr-process-rebase-i-1
  • b、我们可以将test1,test2,test3这3个commit进行压缩并融入到feat: 新增bar功能commit中

    github-pr-process-rebase-i-2
  • c、然后重新调整压缩后的日志commit message,删除test1,test2,test3日志commit message, 这样日志记录就会变得优雅一些

    github-pr-process-rebase-i-3 github-pr-process-rebase-i-git-log

4、push代码到自己fork的远程仓库

建议直接-f,因为这是自己的开发分支(只有自己使用),并且有可能会进行rebase -i等操作,需要冲掉远程旧的 commits 记录。

bash
git push -f origin feat_test

5、创建PR

当把这个feat_test分支push到fork的远程仓库后,我们主页的仓库主页就会出现一个PR的的快捷入口Compare & pull request, 当然也可以去被fork原始仓库的Pull requests板块进行创建PR,这里采用第一种方案

github-pr-process-create-pr-1

点击后就会出现如下页面,包括一些基本信息,如新分支的commits和一些描述这个pr的文字信息, 以及将当前的哪个分支合并到原始仓库的哪个分支,比如现在我们想把自己的feat_test分支合并到原始仓库的main分支上, 然后点击Create pull request即可,至此我们已经成功创建了一个PR,现在只需等待Reviewer来审核

github-pr-process-create-pr-2

如果Reviewer没有直接合并给了一下建议,或者存在冲突,我们可以直接再次在这个分支进行修改并提交, PR会自动更新(上文已经提到github的一个PR是关联一个分支的),等待Reviewer再次审核

6、合并PR(管理者)

作为管理者,可以在Pull requests板块中,找到刚刚创建的PR就可以审核这个PR, 这里有三种合并模式,可根据自己需求选择,这里我选择第3种Rebase and merge,

tips: 为什么这里的commit只有一个?是因为上面的PR存在了冲突,我解决冲突后又再次提交

github-pr-process-merge-pr

当被成功合并后,至此我们成功水了一个PR🎉