云计算百科
云计算领域专业知识百科平台

github协作功能Pull Request(PR)指南

Pull Request 简介

拉取请求(Pull Request)是将代码修改合并到项目中的提议。它是 GitHub 的核心协作功能,支持在合并前对修改进行讨论与审核,有助于团队协作、尽早发现问题并保证代码质量。在开源项目中,Pull Request 被广泛用于参与社区贡献。

对于 GitHub 上其他人建立的项目,我们想要对其进行完善和修改,并向项目的维护者提出合并请求时,就需要使用 Pull Request 功能。整个流程是这样的:Fork 仓库 → 建分支 → 改代码 → 推到 Fork 仓库 → 向原项目提 PR → 原项目维护者审核后合并。

下面我们给出使用Pull Request协作开发时的用到每一步命令,并解释每个命令的作用

Pull Request 协作流程

1. 克隆你的 Fork 到本地

git clone git@github.com:你的用户名/项目名.git
cd 项目名

  • git clone <仓库地址>:将远程仓库完整地复制到本地。这里用的是 SSH 地址(以 git@github.com: 开头),如果你配置了 SSH 密钥,就可以免密操作。你也可以使用 HTTPS 地址,但每次推送可能需要输入账号密码。
  • cd 项目名:进入项目目录,后续操作都在这个目录下进行。

克隆完成后,本地仓库会自动关联一个名为 origin 的远程仓库,指向你的 Fork。

2. 添加上游(原项目)远程(同步用)

git remote add upstream git@github.com:原作者/项目名.git
# 验证
git remote -v

  • git remote add upstream <地址>:给当前本地仓库添加一个新的远程仓库,习惯上命名为 upstream(上游),指向原作者的仓库。这样你就可以随时从原项目拉取最新的更新,保持本地代码与上游同步。
  • git remote -v:列出所有已配置的远程仓库及其地址,用来验证 upstream 是否添加成功。你会看到类似这样的输出:origin git@github.com:你的用户名/项目名.git (fetch)
    origin git@github.com:你的用户名/项目名.git (push)
    upstream git@github.com:原作者/项目名.git (fetch)
    upstream git@github.com:原作者/项目名.git (push)

为什么需要 upstream? 因为你的 Fork 是从原项目复制过来的,但原项目后续可能会有新的提交,如果不及时同步,你的代码就会落后,提 PR 时容易产生冲突。

3. 基于最新代码建新分支(别在 main 直接改)

# 拉取上游最新代码
git fetch upstream
git checkout main
git merge upstream/main
# 创建功能分支
git checkout -b feature/你的功能名

  • git fetch upstream:从 upstream 远程仓库获取最新的提交和历史,但不会自动合并到你的当前分支。这让你可以先看看有哪些更新,再决定如何合并。
  • git checkout main:切换到本地 main 分支(也可能是 master,视项目而定)。
  • git merge upstream/main:将 upstream/main 分支上的最新提交合并到当前所在的本地 main 分支。这一步让本地 main 与上游保持同步。
  • git checkout -b feature/你的功能名:基于当前分支(已经是最新的 main)创建一个新的分支,并立即切换过去。-b 的意思是创建并切换。这个新分支将用于你的修改,命名建议见下文。

为什么不在 main 上直接改? 直接在 main 上修改会使你的主分支与上游产生差异,后续如果需要同步上游更新会变得混乱。创建独立的功能分支,可以让你同时开发多个功能,也便于维护者审查——他们只看到这个分支上的改动,清晰明了。

4. 修改、提交、推到你的 Fork

git add .
git commit -m "feat: 描述你的修改"
git push origin feature/你的功能名

  • git add .:将当前目录下所有已修改、新增的文件添加到 Git 的暂存区(staging area)。你也可以指定具体文件,比如 git add src/index.js。. 是通配符,表示当前目录及子目录的所有改动。
  • git commit -m "提交信息":将暂存区的改动打包成一个新的提交,并附上简短的描述。提交信息的格式建议遵循社区规范(例如 Conventional Commits),后面会介绍。
  • git push origin feature/你的功能名:将本地分支 feature/你的功能名 推送到远程仓库 origin(也就是你的 Fork)上。这样 GitHub 上就有了你新分支的代码,为下一步提 PR 做好准备。

5. 网页端提交 PR

  • 打开你的 Fork 仓库页面(https://github.com/你的用户名/项目名),通常会出现一个黄色的提示框 feature/你的功能名 had recent pushes,并有一个 Compare & pull request 按钮,点击它。
  • 如果没有看到提示,可以点击上方的 Pull requests 标签,然后点击绿色的 New pull request 按钮,再点击 compare across forks 链接。
  • 这时会进入 PR 对比页面,需要正确选择四个关键项:
    • base repository:原项目(原作者/项目名),表示你想把代码合并到哪个仓库。
    • base branch:原项目的目标分支,通常是 main 或 master(也可能是 develop),你需要将修改合并到这个分支。
    • head repository:你的 Fork 仓库(你的用户名/项目名)。
    • compare branch:你刚刚推送的分支(例如 feature/你的功能名)。
  • 填写标题和描述。标题应简洁概括改动,描述可以详细说明你修改了什么、为什么修改、如何测试,以及是否有任何注意事项。描述越清晰,维护者审核越快。
  • 可选:勾选 Allow edits from maintainers。如果勾选,原项目的维护者可以直接在你的 PR 分支上推送修改,方便他们帮你解决一些小问题或冲突。
  • 点击 Create pull request 提交。
  • 至此,你的 PR 就成功提交到了原项目,等待维护者审核。

    6. 后续

    提交 PR 以后,由原项目维护者审核、评论、合并。在此期间你可能会收到反馈,需要根据建议修改代码。以下是常见的后续操作:

    • 如果维护者要求修改:你可以在本地同一个分支上继续修改,然后再次 git add、git commit、git push origin 你的分支名。推送后 PR 会自动更新,无需重新创建。
    • 如果出现冲突:当你的 PR 与目标分支(例如 main)的最新代码有冲突时,GitHub 会提示“This branch has conflicts that must be resolved”。你需要先在本地解决冲突:git checkout main
      git pull upstream main # 拉取上游最新代码
      git checkout feature/你的功能名
      git merge main # 将 main 合并到功能分支,解决冲突
      git push origin feature/你的功能名
      推送后 PR 中的冲突状态会自动更新。注意:不要在 GitHub 网页上直接解决复杂冲突,最好在本地测试后再推送。
    • 如果 PR 被合并:恭喜你,你的贡献已成功加入原项目!之后可以同步你的 Fork 以保持最新:git checkout main
      git pull upstream main
      git push origin main # 更新你的 GitHub 上的 main 分支
      然后可以删除本地和远程的功能分支(可选):git branch -d feature/你的功能名
      git push origin –delete feature/你的功能名

    分支命名方式

    在创建分支时,推荐使用下面的分支命名格式:

    类型/简短描述

    类型-简短描述

    这种命名方式能让你(和项目维护者)一眼看出分支的用途,也方便后期自动化脚本识别。

    1. 类型

    • fix/:修复 bug
    • feat/:新增功能
    • refactor/:重构代码(不改变功能)
    • docs/:文档修改
    • style/:格式、空格、分号等(不影响代码运行)
    • test/:测试相关

    2. 描述

    • 小写英文
    • 单词之间用 – 连接
    • 简洁说明做了什么

    例如:

    feat/add-user-login-and-fix-api-error # 添加用户登录并修复 API 错误
    fix/login-bug-and-add-refresh-token # 修复登录 bug 并添加刷新令牌
    docs/update-readme-usage # 更新 README 使用说明

    团队协作时,分支一多就容易混乱。清晰的命名可以帮助你快速切换,也让 CI/CD 工具能够根据分支类型自动执行不同的测试或部署任务。比如,只有 feat/ 分支才会触发构建预览环境。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » github协作功能Pull Request(PR)指南
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!