Git进阶:gh、gh-aw、worktree

之前写过很多篇Git相关文章:

gh

GitHub官方开源(GitHub,43.6K Star,8.2K Fork)的基于Go开发的CLI工具,将GitHub的核心功能带到终端,支持问题管理、拉取请求、版本发布等完整工作流程。官网官方文档

gh提供非常完整的GitHub命令行操作集合,涵盖仓库管理、问题追踪、拉取请求、Gist、扩展管理等多个方面。​

命令类别 命令 功能描述 常用参数/示例
仓库管理 gh repo 仓库相关操作 查看、创建、克隆、fork仓库
gh repo view 查看仓库信息 gh repo view owner/repo
gh repo create 创建新仓库 gh repo create --public --clone
gh repo clone 克隆仓库 gh repo clone owner/repo
gh repo fork Fork仓库 gh repo fork owner/repo --clone
gh repo list 列出用户仓库 gh repo list --limit 50
问题管理 gh issue 问题相关操作 创建、查看、列出、关闭问题
gh issue list 列出问题 gh issue list --label bug --state open
gh issue create 创建问题 gh issue create --title "Bug" --body "描述"
gh issue view 查看问题详情 gh issue view 123
gh issue close 关闭问题 gh issue close 123 --comment "已修复"
gh issue reopen 重新打开问题 gh issue reopen 123
拉取请求 gh pr 拉取请求操作 创建、查看、合并、检查PR
gh pr create 创建PR gh pr create --title "功能" --body "描述"
gh pr list 列出PR gh pr list --state open --author @me
gh pr view 查看PR详情 gh pr view 456 --web
gh pr checkout 检出PR分支 gh pr checkout 456
gh pr diff 查看PR差异 gh pr diff 456
gh pr merge 合并PR gh pr merge 456 --squash
gh pr status 查看PR状态 gh pr status
gh pr checks 查看PR检查 gh pr checks 456
gh pr review 提交PR审查 gh pr review 456 --approve
Gist管理 gh gist Gist相关操作 创建、查看、编辑、删除Gist
gh gist create 创建Gist gh gist create file.txt --public
gh gist list 列出Gist gh gist list --limit 20
gh gist view 查看Gist gh gist view abc123
gh gist edit 编辑Gist gh gist edit abc123 file.txt
gh gist delete 删除Gist gh gist delete abc123
扩展管理 gh extension 扩展管理 安装、升级、移除扩展
gh extension install 安装扩展 gh extension install owner/gh-extension
gh extension list 列出扩展 gh extension list
gh extension upgrade 升级扩展 gh extension upgrade all
gh extension remove 移除扩展 gh extension remove extension-name
版本发布 gh release 版本发布 创建、查看、下载发布
gh release create 创建发布 gh release create v1.0.0 --notes "发布说明"
gh release list 列出发布 gh release list --limit 10
gh release view 查看发布 gh release view v1.0.0
gh release download 下载发布 gh release download v1.0.0
gh release delete 删除发布 gh release delete v1.0.0 --yes
工作流管理 gh workflow GitHub Actions工作流 查看、运行工作流
gh workflow list 列出工作流 gh workflow list
gh workflow view 查看工作流 gh workflow view build.yml
gh workflow run 运行工作流 gh workflow run build.yml
gh workflow disable 禁用工作流 gh workflow disable build.yml
gh workflow enable 启用工作流 gh workflow enable build.yml
运行器管理 gh run 运行器相关 查看运行状态、日志
gh run list 列出运行 gh run list --workflow build.yml
gh run view 查看运行详情 gh run view 12345
gh run watch 监视运行状态 gh run watch 12345
gh run download 下载运行产物 gh run download 12345
gh run rerun 重新运行 gh run rerun 12345
认证管理 gh auth 认证相关 登录、登出、状态检查
gh auth login 登录GitHub gh auth login --with-token
gh auth logout 登出 gh auth logout
gh auth status 查看认证状态 gh auth status
gh auth refresh 刷新令牌 gh auth refresh
配置管理 gh config 配置管理 设置、获取配置
gh config set 设置配置 gh config set git_protocol ssh
gh config get 获取配置 gh config get editor
gh config list 列出所有配置 gh config list
别名管理 gh alias 命令别名 设置、查看、删除别名
gh alias set 设置别名 gh alias set bugs 'issue list --label bug'
gh alias list 列出别名 gh alias list
gh alias delete 删除别名 gh alias delete bugs
API调用 gh api 直接调用GitHub API 灵活调用REST API
gh api 调用API端点 gh api /user
gh api graphql 调用GraphQL API gh api graphql -f query='{ viewer { login } }'
浏览器打开 gh browse 在浏览器中打开 打开仓库、PR、Issue等
gh browse 打开当前仓库 gh browse
gh browse --issues 打开Issues页面 gh browse --issues
gh browse --pr 456 打开特定PR gh browse --pr 456
gh browse --wiki 打开Wiki页面 gh browse --wiki
gh browse --settings 打开设置页面 gh browse --settings
代码片段 gh codespace Codespace管理 创建、列出、删除
gh codespace list 列出Codespace gh codespace list
gh codespace create 创建Codespace gh codespace create --repo owner/repo
gh codespace delete 删除Codespace gh codespace delete codespace-name
秘密管理 gh secret Secrets管理 设置、列出、删除秘密
gh secret set 设置秘密 gh secret set MY_TOKEN -b"token-value"
gh secret list 列出秘密 gh secret list
gh secret delete 删除秘密 gh secret delete MY_TOKEN
环境管理 gh environment 环境管理 查看、配置环境
gh environment list 列出环境 gh environment list
gh environment view 查看环境详情 gh environment view production
缓存管理 gh cache Actions缓存管理 查看、删除缓存
gh cache list 列出缓存 gh cache list
gh cache delete 删除缓存 gh cache delete cache-key
搜索功能 gh search 搜索GitHub内容 搜索仓库、代码、议题等
gh search repos 搜索仓库 gh search repos "react hooks" --language=JavaScript
gh search code 搜索代码 gh search code "useState" --repo=facebook/react
gh search issues 搜索议题 gh search issues "bug" --state=open
gh search prs 搜索PR gh search prs "feature" --author=octocat
项目板管理 gh project 项目管理 查看、创建项目
gh project list 列出项目 gh project list --owner org
gh project view 查看项目 gh project view 123
gh project create 创建项目 gh project create --title "新项目"
团队管理 gh team 团队管理 查看、管理团队
gh team list 列出团队 gh team list --org github
gh team view 查看团队 gh team view engineering
通知管理 gh notification 通知管理 查看、管理通知
gh notification list 列出通知 gh notification list
gh notification view 查看通知 gh notification view 123
gh notification mark 标记通知 gh notification mark --read 123
赞助管理 gh sponsor 赞助管理 查看、管理赞助
gh sponsor list 列出赞助者 gh sponsor list
gh sponsor view 查看赞助详情 gh sponsor view octocat
帮助信息 gh help 帮助信息 查看命令帮助
gh help 显示帮助概览 gh help
gh help <command> 查看命令帮助 gh help pr
gh help --web 在浏览器中打开帮助 gh help pr --web
版本信息 gh version 版本信息 显示gh版本
gh version 显示版本号 gh version
gh upgrade 升级gh gh upgrade

高级功能

  • 脚本和自定义
    • API调用:直接调用GitHub API进行自动化操作
    • 自定义别名:为常用命令创建快捷方式
    • 输出格式化:支持JSON、YAML等格式输出
  • 企业支持
    • GitHub Enterprise:连接到企业版GitHub
    • 认证管理:支持多种认证方式

实战

提供多种安装方式:

  • 官网或GitHub Release页面下载
  • 命令行
bash 复制代码
brew install gh

使用示例:

bash 复制代码
# 登录GitHub帐户进行身份验证
gh auth login
gh auth logout
gh auth refresh
gh auth setup-git
# 设置首选编辑器
gh config set editor <editor>
# 为常用命令设置别名
gh alias set
gh alias list
gh alias import
gh alias delete
gh issue list
gh pr create
# 在Visual Studio Code中打开一个代码空间
gh codespace code
# 将SSH密钥添加到GitHub帐户
gh ssh-key add
gh gist clone
gh gist create
gh gist delete
gh gist edit
gh gist list
gh gist rename
gh gist view

gh-aw

官网,GitHub官方开源(GitHub,4.2K Star,329 Fork)的一款基于gh的扩展,全称为gh-aw(GitHub CLI extension for AWS),核心是打通GitHub CLI与AWS的操作链路,让开发者可直接通过gh命令行一站式管理与GitHub集成的AWS资源,无需切换多个工具或终端会话。

核心特点

  • 工具集成化:将GitHub CLI与AWS CLI能力融合,统一操作入口,减少跨工具切换成本;
  • 场景聚焦:针对GitHub与AWS协同的核心场景(如AWS资源与GitHub仓库/Action联动、身份认证打通等)做轻量化适配;
  • 命令轻量化:基于gh扩展体系设计,命令语法贴合gh生态习惯,开发者无需重新学习全新命令逻辑;
  • 官方:由GitHub官方维护,兼容性和安全性有保障,适配GitHub生态的最新特性;
  • 易安装扩展:遵循gh extension标准安装方式(gh extension install github/gh-aw),秒级完成部署使用;
  • 云资源联动:简化GitHub Actions调用AWS资源、GitHub仓库关联AWS服务(如CodeBuild、ECR等)的配置与操作流程。

worktree

实现:同一个仓库,开多个工作目录,同时在不同分支干活,互不打扰。

优势:

  • 完全隔离:每个目录之间文件互不干扰,告别冲突。
  • 共享历史:所有worktree共享同一个Git历史,commitbranchremote完全同步。
  • 告别 git stash:你的工作现场被原封不动地保留。
  • 零上下文切换开销:AI 助手在每个环境中都保持完整的记忆。
  • 从根源上杜绝提交错分支:你不可能在 ml-project-bugfix 目录里把代码提交到 feature 分支。

共享仓库对象 + 独立工作区状态:

  • 提交历史、对象库这些核心内容是共享的。
  • 每个 worktree 有自己独立的 HEADindex 和工作目录状态。
  • 所以你可以在 A 目录做 feature,在 B 目录修 hotfix,不用反复来回切分支。

流程示例:

bash 复制代码
git worktree add -b emergency-fix ../temp master
cd ../temp
# 修Bug然后提交
git commit -a -m "emergency fix"
cd -
git worktree remove ../temp

命令行:

  • add:创建新 worktree
  • list:查看所有 worktree
  • remove:删除 worktree
  • move:移动 worktree 目录
  • lock / unlock:锁定或解锁(防止被误删或被 prune)
  • prune:清理失效的 worktree 元数据
  • repair:手动移动目录后修复链接关系

规则

  • Git 默认不让同一个分支同时在多个 worktree 被 checkout:保护机制,不是限制你发挥。它是在防止你自己把分支状态写乱。
  • --force 在某些场景下要用两次:如操作一个"已锁定"的 worktree,文档明确说可能需要 --force --force。不是Bug,是有意提高危险操作门槛。

解决三个高频痛点:

  • 任务切换成本:以前切任务是"清现场 + 切分支 + 祈祷不冲突"。现在是"切目录"。任务边界从逻辑层落到了物理层。
  • 上下文隔离:不同 worktree 对应不同任务,目录就是上下文。你一进目录就知道自己在干什么,不容易串台。
  • 自动化友好:当你用脚本或 AI agent 并行跑任务时,worktree 是天然隔离单元。每个Agent绑一个目录,冲突明显下降。

进阶

  • 参数:如果你要写脚本解析 git worktree list,别拿默认输出硬切字符串。

    官方给稳定机器可读格式:--porcelain,再配-z处理特殊字符路径。

  • --worktree配置

    默认情况下,多个worktree共享仓库配置。

    但有些配置你不想共享,如某个目录专用sparse-checkout或行为开关。

    文档建议开启extensions.worktreeConfig,用git config --worktree写入当前工作区配置。

    一句话:共享该共享的,隔离该隔离的。

checkout场景整体仍有实验性质,submodule支持也并不完整。能不用superproject多重checkout就别硬上,至少先在团队里做小范围验证。

适用场景:

  • 安全的框架迁移(无痛重构)
bash 复制代码
# 从Spring Security迁移到Sa-Token
git worktree add ../SaToken-migration -b experiment/SaToken-migration main
cd ../SaToken-migration

问题

  • 每个worktree都有一套 Python或Node.js依赖,太占硬盘空间。

解决方案:使用共享的虚拟环境或容器化技术。

bash 复制代码
# 方案一:共享 Conda 环境 (推荐)
conda create -n ml-shared python=3.10
conda activate ml-shared
pip install -r requirements.txt
# 在所有 worktree 中都激活这个共享环境
cd ../ml-project-training && conda activate ml-shared
cd ../ml-project-inference && conda activate ml-shared

# 方案二:Poetry/pnpm 等自带缓存共享的包管理器
poetry config cache-dir /shared/poetry-cache
poetry install  # 会使用共享的依赖缓存

# 方案三:Docker 与共享卷
docker run -v $(pwd):/workspace -v ml-packages:/opt/conda/lib/python3.10/site-packages python:3.10

高级玩法:

bash 复制代码
# 使用 Git 内置的垃圾回收和去重功能
git repack -ad

# (高阶操作,慎用!) 在 worktree 间共享 node_modules
# 只适用于那些只读的依赖
ln -s ../../myapp-main/node_modules ./node_modules

# 使用 pnpm 这类天生支持依赖共享的包管理器
pnpm install # 自动共享依赖包
  • 不同的机器学习 worktree 之间数据和模型发生冲突。

训练分支污染了生产分支的数据。

解决方案: 使用隔离的数据路径和模型版本管理工具。

bash 复制代码
# 为每个 worktree 设置不同的环境变量
export DATA_PATH=/data/training-experiments
export MODEL_PATH=/models/training-v1

export DATA_PATH=/data/inference-production
export MODEL_PATH=/models/production-v2

# 或者用 Docker 卷进行数据隔离
docker run --name ml-training-env -v training-data:/data -v training-models:/models python:3.10
docker run --name ml-inference-env -v inference-data:/data -v production-models:/models python:3.10

# 使用 MLflow 等模型注册中心进行版本管理
mlflow server --backend-store-uri sqlite:///training.db --default-artifact-root ./training-artifacts
mlflow server --backend-store-uri sqlite:///production.db --default-artifact-root ./production-artifacts
  • 每个 worktree 的包版本不一致,导致环境混乱。

解决方案: 使用锁文件(lockfiles)和版本固定。

bash 复制代码
# 创建新 worktree 后,第一时间复制锁文件
cp requirements.txt ../myapp-feature/
cp poetry.lock ../myapp-feature/

# 或者在安装时就固定版本
pip install --save-exact torch==2.0.0 torchvision==0.15.0

工作流自动化脚本

一键创建Worktree工作区

bash 复制代码
#!/bin/bash
# 保存为: create-worktree.sh

if [ $# -eq 0 ]; then
    echo"用法: $0 <分支名> [基于哪个分支]"
    exit 1
fi

BRANCH_NAME=$1
BASE_BRANCH=${2:-main}
REPO_NAME=$(basename $(git rev-parse --show-toplevel))
WORKTREE_PATH="../${REPO_NAME}-${BRANCH_NAME}"

# 创建 worktree
git worktree add -b "$BRANCH_NAME""$WORKTREE_PATH""$BASE_BRANCH"

# 进入目录并设置环境 (根据你的项目修改)
cd "$WORKTREE_PATH"
pip install -r requirements.txt # 或者 npm install

# 创建一个任务描述文件,方便 AI 理解
echo"# 任务: $BRANCH_NAME
## 描述:
[在这里写下你的任务描述]

## 需要修改的文件:
-

## 完成标准:
- " > TASK.md
# 用VS Code打开
code .
echo "Worktree创建成功: $WORKTREE_PATH"
echo "任务文件已创建: TASK.md"
echo "可以开始召唤 AI 助手了!"

自动化清理脚本

bash 复制代码
#!/bin/bash
# 保存为: cleanup-worktrees.sh

echo"正在清理已合并的 worktree..."

# 遍历所有 worktree,但不包括主目录
git worktree list | grep -v "$(git rev-parse --show-toplevel)" | whileread worktree branch commit; do
    # 提取纯粹的分支名
    branch_name=$(echo$branch | sed 's/\[//g' | sed 's/\]//g')
    
    # 检查分支是否已经合并到 main
    if git branch --merged main | grep -q "$branch_name"; then
        echo"正在移除已合并的 worktree: $worktree ($branch_name)"
        git worktree remove "$worktree"
        git branch -d "$branch_name"
    fi
done

echo "清理完成!"

https://github.com/evmts/tevm-monorepo仓库,`.claude/commands` 目录还有更多高级玩法。

AI与worktree

允许并行运行多个AI会话,每个会话都有自己独立的上下文。再也不用切换上下文。

AI的上下文来源:

  • 文件系统感知:当前打开的文件、项目结构、目录组织。
  • Git 历史集成:最近的提交记录、分支关系、变更模式。
  • 依赖理解:包管理文件(如 requirements.txt)、导入关系、环境配置。
  • 对话记忆:你的指令、偏好和正在进行的讨论。
  • 代码模式识别:编码风格、架构决策、命名约定。

应用场景其一模型对决:A/B测试不同AI的实现

bash 复制代码
git worktree add ../ml-claude-implementation -b experiment/claude-automl main
git worktree add ../ml-codex-implementation -b experiment/codex-automl main
# 决定采用哪个方案
git add -A
# 回到主项目
cd ../ml-project
git merge experiment/claude-automl
# 清理战场
git worktree remove ../ml-claude-implementation
git branch -d experiment/claude-automl

git submodule update --remote scientific-skills

相关推荐
OPHKVPS2 小时前
Anthropic官方Git MCP服务器曝三重漏洞:提示注入即可实现文件读写与远程代码执行
运维·服务器·git
牢七16 小时前
无境靶场练习一(失败)
git
HuaCode21 小时前
Openclaw一键安装部署(2026年4月最新)
git·python·nodejs·openclaw·api token
小比特_蓝光1 天前
版本控制器Git/调试器gdb/cgdb使用
git
海参崴-1 天前
Git使用完全指南
git
Jp7gnUWcI1 天前
AI Compose Commit:用 AI 智能重构 Git 提交工作流
人工智能·git·重构
小柯博客1 天前
从零开始打造 OpenSTLinux 6.6 Yocto 系统 - STM32MP2(基于STM32CubeMX)(八)
c语言·git·stm32·单片机·嵌入式硬件·嵌入式·yocto
eastyuxiao1 天前
如何在不同的机器上运行多个OpenClaw实例?
人工智能·git·架构·github·php
bu_shuo2 天前
git练习学习网站【中文网站】
git·学习