# 每次提 Pull Request 还得开网页点创建，GitHub CLI 能在终端做完吗？

**URL:** <https://www.shiqidu.com/t/topic/2036>\
**Category:** 开发调优\
**Tags:** 问与答, GitHub, git, 编程, 开源软件\
**Created:** [2026 年11 月 12 日 02:17 UTC](https://www.shiqidu.com/t/topic/2036 "2026-11-12T02:17:34Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

作者： ![shiqidu\_editor](https://www.shiqidu.com/user_avatar/www.shiqidu.com/shiqidu_editor/32/528_2.png) [@shiqidu\_editor](https://www.shiqidu.com/u/shiqidu_editor)\
发布日期： [2026 年11 月 12 日 02:17 UTC](https://www.shiqidu.com/t/topic/2036/1 "2026-11-12T02:17:34Z")

</div>

分支已经推到远端，提 Pull Request 却还要切到浏览器：点创建、填标题、选要合进哪条分支。看完别人的改动，再切回终端换分支。来回几次，提交本身没占用多少时间，切页面倒占了不少。git 负责提交和推送。托管平台上的创建、指派、检出，可以留在终端里做完。

[GitHub CLI 手册](https://cli.github.com/manual/) 把 `gh` 写成在终端或脚本里操作 GitHub 的命令行界面。安装入口手册指向仓库 README，这里只谈登录之后怎么创建和检出 Pull Request。只给自己的账号授权，不要拿来路不明的令牌去登别人的仓库。

## 本机登录

手册对应的入口是 [`gh auth login`](https://cli.github.com/manual/gh_auth_login)。默认主机是 `github.com`，企业实例加上 `--hostname`。默认认证是在浏览器里走一遍流程，完成后令牌会存进系统凭据库。找不到凭据库时才会退回到明文文件，存放位置可以用 `gh auth status` 查看。再加上 `--web --clipboard`，会打开浏览器，并把一次性设备码拷进剪贴板。

也可以用 `--with-token` 从标准输入读入个人访问令牌。手册写明，经典令牌至少要有 `repo`、`read:org`、`gist` 这三个范围。细粒度令牌会绑定到特定资源，交互其他资源时容易行为怪异，这种情况手册更建议改用 `GH_TOKEN`。环境变量里的令牌同样会被读取，更适合无界面的自动化。`--git-protocol` 用来选定后续 git 操作走 `https` 还是 `ssh`。选 `ssh` 时，它会尝试发现已有密钥，没有就提示生成并上传，可用 `--skip-ssh-key` 跳过这一步。这些都是给本机、自己的账号用的入口，不是去绕过仓库权限。

## 创建和检出

[`gh pr create`](https://cli.github.com/manual/gh_pr_create) 成功后会打印出新 Pull Request 的网址，别名是 `gh pr new`。当前分支还没完全推到远端时，它会询问推到哪里，并在没有推送权限时提供 fork 的选项。标题和正文默认会交互询问。`--title` / `--body` 可以直接带上，`--fill` 则从 git 提交记录自动取标题和正文。这两类写法同时出现时，显式参数会覆盖自动填充。不想在终端里问答，也可以用 `--editor`：打开编辑器后，第一行当作标题，其余当作正文。`--base` 指定合入的目标分支，不写则看当前分支的 `gh-merge-base` 配置，再没有就用仓库默认分支。`--draft` 可以先开成草稿，`--reviewer` 和 `--assignee` 能直接带上审查人和指派人，指派人写成 `@me` 就指向自己。`--web` 仍会打开网页，适合还想在页面里改最后一眼的人。正文里写 `Fixes #123` 或 `Closes #123`，合并后会关掉对应议题，这是手册写明的关联方式。默认情况下，对目标仓库有写权限的人可以向这条 head 分支继续推送，不想开放这一项时加上 `--no-maintainer-edit`。创建中途失败时，可以用 `--recover` 恢复上次输入。

要改别人已经开出的 Pull Request，手册对应的是 [`gh pr checkout`](https://cli.github.com/manual/gh_pr_checkout)，参数可以是编号、网址或分支名。不带参数时，会从最近十条里交互挑选。官方说明里，仓库中来自 fork 的请求也可以这样检出。需要把这份改动放到另一个目录时，可以用 `--worktree` 指定路径，和站内写过的 [git worktree](https://www.shiqidu.com/t/topic/1991) 是同一类做法，怎么维护这里不展开。本地已有同名分支、只想对齐远端最新状态时，手册提供的是 `--force`。

日常最小路径往往是这样：在本机登录一次，分支推上去之后直接 `gh pr create`，按提示填标题和正文，成功后终端里就能拿到网址。别人已经开出来、要在本机接着改时，再 `gh pr checkout` 带上编号。不必为了创建和切换再反复打开网页。

定时跑工作流是另一条线，跟终端里手动提 Pull Request 不是同一件事，时区问题可以看站内这篇 [Actions 定时任务时区](https://www.shiqidu.com/t/topic/1855)。

你们现在提 Pull Request，还是会切到网页上点创建吗？
