github cli(gh)不是git替代品,而是补足其缺失的平台层操作,支持一键创建远程仓库、开pr、查issue、合并代码等,全程免切浏览器。

GitHub CLI 不是 Git 的替代品,而是补足 Git 缺失的「平台层操作」——它不处理本地提交、分支切换或暂存区管理,但能一键创建远程仓库、开 PR、查 issue、合并代码,全程不用切浏览器。
gh repo create 为什么比手动建库快 30 秒以上
手动流程要打开 GitHub 网页 → 点 New repository → 填名称 → 勾 Private → 不勾 README → 复制 URL → 回终端配 remote → push。而 gh repo create 把这串动作压成一行:
gh repo create my-app --private --source=. --remote=origin --push
关键点:
-
--source=.表示当前目录已初始化为 Git 仓库(否则会报错not a git repository) -
--remote=origin自动执行git remote add origin <url></url>,无需手输 URL -
--push自动执行git push -u origin main,连分支名都默认适配 GitHub 当前规范(main 而非 master) - 如果没登录,命令会直接卡住并提示运行
gh auth login,不会静默失败
gh pr create 交互式创建 vs 直接提交的取舍
运行 gh pr create 默认进入交互式流程:选 base 分支、填 title、填 body、选 label、选 assignee。适合第一次提 PR 或需要多人协作确认内容的场景。
但 CI/CD 脚本里不能交互,这时要用参数直传:
gh pr create --title "chore: bump deps" --body "via dependabot" --label "dependencies" --base main
注意:
- 必须确保当前分支已 push 到远程,否则报错
Could not determine the head branch for your pull request -
--base指定目标分支(如main),不加则默认用仓库 default branch - 如果 body 内容含换行或特殊字符,建议用单引号包裹,避免 shell 解析错误
gh pr list 和 gh issue list 的筛选陷阱
这两个命令输出默认是分页的,且字段宽度固定,容易漏看长标题或跨多行的标签。真实使用中常见问题:
- 想只看自己提的 PR?别用
--assignee @me(这是给 reviewer 用的),正确写法是--author @me - 按 label 筛选时,
--label bug,docs是“同时含两个 label”,不是“任一”,要 OR 逻辑得用两次命令拼接或脚本过滤 - 输出里状态列显示
Merged或Closed,但它们其实已被归档,--state all才能拉到(默认只拉open) - 时间范围无法直接指定,但可配合
gh pr list --json number,title,updatedAt --jq用 jq 过滤,例如:... | jq 'map(select(.updatedAt > "2026-05-01"))'
gh auth login 后 HTTPS 协议下 token 怎么管
选 HTTPS 协议时,gh auth login 实际生成的是 GitHub Token,并自动配置进 Git credential helper(macOS Keychain / Windows Credential Manager / Linux libsecret)。这意味着:
- 后续所有
git push都走 token 认证,不再弹用户名密码框 - token 权限默认是
repo+workflow,够日常用;如需更细控制,得去 GitHub Settings → Developer settings → Personal access tokens 手动删旧 token、新建带指定 scope 的 - 如果某天
git push突然报Authentication failed,大概率是 token 过期或被 revoke,运行gh auth status可验证,再跑一次gh auth login就行 - 别把 token 硬编码进脚本或 .gitconfig,
gh自己管 token 生命周期,你只管用命令
真正容易被忽略的是:一旦用了 gh auth login,Git 的 credential helper 就被接管了,手动改 ~/.gitconfig 里的 [credential] 段可能失效——所有认证行为应以 gh auth 系列为唯一信源。











