之前写过很多篇Git相关文章Git使用笔记Git TagGit Cherry PickGit clone/pull/push需要输入密码解决方法GitHub使用技巧Git进阶、衍生ghGitHub官方开源GitHub43.6K Star8.2K Fork的基于Go开发的CLI工具将GitHub的核心功能带到终端支持问题管理、拉取请求、版本发布等完整工作流程。官网官方文档。gh提供非常完整的GitHub命令行操作集合涵盖仓库管理、问题追踪、拉取请求、Gist、扩展管理等多个方面。类别命令功能描述常用参数/示例仓库管理gh repo仓库相关操作查看、创建、克隆、fork仓库gh repo view查看仓库信息gh repo view owner/repogh repo create创建新仓库gh repo create --public --clonegh repo clone克隆仓库gh repo clone owner/repogh repo forkFork仓库gh repo fork owner/repo --clonegh repo list列出用户仓库gh repo list --limit 50问题管理gh issue问题相关操作创建、查看、列出、关闭问题gh issue list列出问题gh issue list --label bug --state opengh issue create创建问题gh issue create --title Bug --body 描述gh issue view查看问题详情gh issue view 123gh issue close关闭问题gh issue close 123 --comment 已修复gh issue reopen重新打开问题gh issue reopen 123拉取请求gh pr拉取请求操作创建、查看、合并、检查PRgh pr create创建PRgh pr create --title 功能 --body 描述gh pr list列出PRgh pr list --state open --author megh pr view查看PR详情gh pr view 456 --webgh pr checkout检出PR分支gh pr checkout 456gh pr diff查看PR差异gh pr diff 456gh pr merge合并PRgh pr merge 456 --squashgh pr status查看PR状态gh pr statusgh pr checks查看PR检查gh pr checks 456gh pr review提交PR审查gh pr review 456 --approveGist管理gh gistGist相关操作创建、查看、编辑、删除Gistgh gist create创建Gistgh gist create file.txt --publicgh gist list列出Gistgh gist list --limit 20gh gist view查看Gistgh gist view abc123gh gist edit编辑Gistgh gist edit abc123 file.txtgh gist delete删除Gistgh gist delete abc123扩展管理gh extension扩展管理安装、升级、移除扩展gh extension install安装扩展gh extension install owner/gh-extensiongh extension list列出扩展gh extension listgh extension upgrade升级扩展gh extension upgrade allgh 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 10gh release view查看发布gh release view v1.0.0gh release download下载发布gh release download v1.0.0gh release delete删除发布gh release delete v1.0.0 --yes工作流管理gh workflowGitHub Actions工作流查看、运行工作流gh workflow list列出工作流gh workflow listgh workflow view查看工作流gh workflow view build.ymlgh workflow run运行工作流gh workflow run build.ymlgh workflow disable禁用工作流gh workflow disable build.ymlgh workflow enable启用工作流gh workflow enable build.yml运行器管理gh run运行器相关查看运行状态、日志gh run list列出运行gh run list --workflow build.ymlgh run view查看运行详情gh run view 12345gh run watch监视运行状态gh run watch 12345gh run download下载运行产物gh run download 12345gh run rerun重新运行gh run rerun 12345认证管理gh auth认证相关登录、登出、状态检查gh auth login登录GitHubgh auth login --with-tokengh auth logout登出gh auth logoutgh auth status查看认证状态gh auth statusgh auth refresh刷新令牌gh auth refresh配置管理gh config配置管理设置、获取配置gh config set设置配置gh config set git_protocol sshgh config get获取配置gh config get editorgh config list列出所有配置gh config list别名管理gh alias命令别名设置、查看、删除别名gh alias set设置别名gh alias set bugs issue list --label buggh alias list列出别名gh alias listgh alias delete删除别名gh alias delete bugsAPI调用gh api直接调用GitHub API灵活调用REST APIgh api调用API端点gh api /usergh api graphql调用GraphQL APIgh api graphql -f query{ viewer { login } }浏览器gh browse在浏览器中打开打开仓库、PR、Issue等gh browse打开当前仓库gh browsegh browse --issues打开Issues页面gh browse --issuesgh browse --pr 456打开特定PRgh browse --pr 456gh browse --wiki打开Wiki页面gh browse --wikigh browse --settings打开设置页面gh browse --settings代码片段gh codespaceCodespace管理创建、列出、删除gh codespace list列出Codespacegh codespace listgh codespace create创建Codespacegh codespace create --repo owner/repogh codespace delete删除Codespacegh codespace delete codespace-name密钥管理gh secretSecrets管理设置、列出、删除秘密gh secret set设置秘密gh secret set MY_TOKEN -btoken-valuegh secret list列出秘密gh secret listgh secret delete删除秘密gh secret delete MY_TOKEN环境管理gh environment环境管理查看、配置环境gh environment list列出环境gh environment listgh environment view查看环境详情gh environment view production缓存管理gh cacheActions缓存管理查看、删除缓存gh cache list列出缓存gh cache listgh cache delete删除缓存gh cache delete cache-key搜索功能gh search搜索GitHub内容搜索仓库、代码、议题等gh search repos搜索仓库gh search repos react hooks --languageJavaScriptgh search code搜索代码gh search code useState --repofacebook/reactgh search issues搜索议题gh search issues bug --stateopengh search prs搜索PRgh search prs feature --authoroctocat项目板管理gh project项目管理查看、创建项目gh project list列出项目gh project list --owner orggh project view查看项目gh project view 123gh project create创建项目gh project create --title 新项目团队管理gh team团队管理查看、管理团队gh team list列出团队gh team list --org githubgh team view查看团队gh team view engineering通知管理gh notification通知管理查看、管理通知gh notification list列出通知gh notification listgh notification view查看通知gh notification view 123gh notification mark标记通知gh notification mark --read 123赞助管理gh sponsor赞助管理查看、管理赞助gh sponsor list列出赞助者gh sponsor listgh sponsor view查看赞助详情gh sponsor view octocat帮助信息gh help帮助信息查看命令帮助gh help显示帮助概览gh helpgh help command查看命令帮助gh help prgh help --web在浏览器中打开帮助gh help pr --web版本信息gh version版本信息显示gh版本gh version显示版本号gh versiongh upgrade升级ghgh upgrade高级功能脚本和自定义API调用直接调用GitHub API进行自动化操作自定义别名为常用命令创建快捷方式输出格式化支持JSON、YAML等格式输出企业支持GitHub Enterprise连接到企业版GitHub认证管理支持多种认证方式实战提供多种安装方式官网或GitHub Release页面下载命令行brewinstallgh使用示例# 登录GitHub帐户进行身份验证gh auth login gh authlogoutgh auth refresh gh auth setup-git# 设置首选编辑器gh configseteditoreditor# 为常用命令设置别名ghaliassetghaliaslist ghaliasimportghaliasdelete gh issue list ghprcreate# 在Visual Studio Code中打开一个代码空间gh codespace code# 将SSH密钥添加到GitHub帐户gh ssh-keyaddgh gist clone gh gist create gh gist delete gh gist edit gh gist list gh gistrenamegh gist viewgh-aw官网GitHub官方开源GitHub4.2K Star329 Fork的一款基于gh的扩展全称为gh-awGitHub 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历史commit、branch、remote完全同步。告别git stash你的工作现场被原封不动地保留。零上下文切换开销AI 助手在每个环境中都保持完整的记忆。从根源上杜绝提交错分支你不可能在ml-project-bugfix目录里把代码提交到feature分支。共享仓库对象 独立工作区状态提交历史、对象库这些核心内容是共享的。每个 worktree 有自己独立的HEAD、index和工作目录状态。所以你可以在 A 目录做 feature在 B 目录修 hotfix不用反复来回切分支。流程示例gitworktreeadd-bemergency-fix../temp mastercd../temp# 修Bug然后提交gitcommit-a-memergency fixcd-gitworktree remove../temp命令行add创建新 worktreelist查看所有 worktreeremove删除 worktreemove移动 worktree 目录lock/unlock锁定或解锁防止被误删或被 pruneprune清理失效的 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就别硬上至少先在团队里做小范围验证。适用场景安全的框架迁移无痛重构# 从Spring Security迁移到Sa-Tokengitworktreeadd../SaToken-migration-bexperiment/SaToken-migration maincd../SaToken-migration问题每个worktree都有一套 Python或Node.js依赖太占硬盘空间。解决方案使用共享的虚拟环境或容器化技术。# 方案一共享 Conda 环境 (推荐)conda create-nml-sharedpython3.10conda activate ml-shared pipinstall-rrequirements.txt# 在所有 worktree 中都激活这个共享环境cd../ml-project-trainingconda activate ml-sharedcd../ml-project-inferenceconda activate ml-shared# 方案二Poetry/pnpm 等自带缓存共享的包管理器poetry config cache-dir /shared/poetry-cache poetryinstall# 会使用共享的依赖缓存# 方案三Docker 与共享卷dockerrun-v$(pwd):/workspace-vml-packages:/opt/conda/lib/python3.10/site-packages python:3.10高级玩法# 使用 Git 内置的垃圾回收和去重功能gitrepack-ad# (高阶操作慎用) 在 worktree 间共享 node_modules# 只适用于那些只读的依赖ln-s../../myapp-main/node_modules ./node_modules# 使用 pnpm 这类天生支持依赖共享的包管理器pnpminstall# 自动共享依赖包不同的机器学习 worktree 之间数据和模型发生冲突。训练分支污染了生产分支的数据。解决方案 使用隔离的数据路径和模型版本管理工具。# 为每个 worktree 设置不同的环境变量exportDATA_PATH/data/training-experimentsexportMODEL_PATH/models/training-v1exportDATA_PATH/data/inference-productionexportMODEL_PATH/models/production-v2# 或者用 Docker 卷进行数据隔离dockerrun--nameml-training-env-vtraining-data:/data-vtraining-models:/models python:3.10dockerrun--nameml-inference-env-vinference-data:/data-vproduction-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和版本固定。# 创建新 worktree 后第一时间复制锁文件cprequirements.txt../myapp-feature/cppoetry.lock../myapp-feature/# 或者在安装时就固定版本pipinstall--save-exacttorch2.0.0torchvision0.15.0工作流自动化脚本一键创建Worktree工作区#!/bin/bash# 保存为: create-worktree.shif[$#-eq0];thenecho用法:$0分支名 [基于哪个分支]exit1fiBRANCH_NAME$1BASE_BRANCH${2:-main}REPO_NAME$(basename$(git rev-parse --show-toplevel))WORKTREE_PATH../${REPO_NAME}-${BRANCH_NAME}# 创建 worktreegitworktreeadd-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 助手了自动化清理脚本#!/bin/bash# 保存为: cleanup-worktrees.shecho正在清理已合并的 worktree...# 遍历所有 worktree但不包括主目录gitworktree list|grep-v$(gitrev-parse --show-toplevel)|whileread worktree branch commit;do# 提取纯粹的分支名branch_name$(echo$branch|seds/\[//g|seds/\]//g)# 检查分支是否已经合并到 mainifgitbranch--mergedmain|grep-q$branch_name;thenecho正在移除已合并的 worktree:$worktree($branch_name)gitworktree remove$worktreegitbranch-d$branch_namefidoneecho清理完成https://github.com/evmts/tevm-monorepo仓库.claude/commands目录还有更多高级玩法。AI与worktree允许并行运行多个AI会话每个会话都有自己独立的上下文。再也不用切换上下文。AI的上下文来源文件系统感知当前打开的文件、项目结构、目录组织Git历史集成最近的提交记录、分支关系、变更模式依赖理解包管理文件如requirements.txt、导入关系、环境配置对话记忆你的指令、偏好和正在进行的讨论代码模式识别编码风格、架构决策、命名约定应用场景其一模型对决A/B测试不同AI的实现gitworktreeadd../ml-claude-implementation-bexperiment/claude-automl maingitworktreeadd../ml-codex-implementation-bexperiment/codex-automl main# 决定采用哪个方案gitadd-A# 回到主项目cd../ml-projectgitmerge experiment/claude-automl# 清理战场gitworktree remove../ml-claude-implementationgitbranch-dexperiment/claude-automlSubmodule在浏览GitHub源码仓库时经常会看到如下链接符号点击文件夹跳转到另一个GitHub仓库。分析这是Git子模块(Submodule)的GitHub页面的可视化表现不是普通文件夹。子模块是Git的一种功能允许将一个Git仓库嵌套在另一个Git仓库中父仓库不包含子模块的实际代码只存储子模块仓库的URL和特定提交的SHA值。如果代码库有隐藏文件.gitmodules就表明其含有字模块内容示例[submodule rapidjson] path rapidjson url https://github.com/Tencent/rapidjson.git那SHA值呢git clone后根据本地.git/modules/config文件命令行使用# 初始化子模块gitsubmodule init# 添加子模块git submodule add 子模块URL 子模块目录。默认使用子模块仓库的名称作为路径gitsubmoduleadd子模块URL子模块目录# 执行git clone并添加为子目录https://github.com/Tencent/weui# 执行git clone并重命名文件夹https://github.com/Tencent/weui myui# 更新子模块gitsubmodule update# 递归更新子模块及其子模块gitsubmodule update--recursive--remote# 列出子模块gitsubmodule# 检查子模块状态gitsubmodule status# 移除子模块gitsubmodule deinit[path]gitrm[path]在一个不含有子模块的代码库里执行git submodule init命令看起来没有任何效果既不会产生.gitmodules文件也不会生成.git/modules/folder隐藏文件夹。重命名效果图并同步修改.gitmodules文件。子模块嵌套效果图更新子模块当子模块的维护者提交更新后使用子模块的项目必须手动更新才能包含最新提交。