Back to skills
extension
Category: OtherNo API key required

GitHub操作助手

用大白话操作当前项目的 Git/GitHub——备份、查询历史、回滚代码、管理分支。当用户用日常语言表达 git 意图时触发(例如"git备份一下""git看看我改了啥""git回退到上一个版本""git新建个分支搞新功能""git合并到主分支")。该 skill 将自然语言翻译为准确的 git 命令,在当前工作目录执行,执行前用大白话说明将做什么,对回滚、强制推送、删除分支等危险操作强制二次确认。适用于任何已初始化 git 仓库的项目;仓库未初始化时引导完成 init 与远程关联。所有触发词均含 "git" 关键词(如"git备份""git回滚""git分支"等)。

personAuthor: user_00bc0e74hubcommunity

Git Plain Speak(大白话搞 Git)

Overview

把用户说的"人话"翻译成正确的 git 命令,在当前工作目录的项目里执行。覆盖四类高频操作:备份、查询、回滚、分支。所有命令执行前先用一句话说清"要干啥、影响什么",危险操作(改写历史、丢数据、强制推送)必须显式确认后才执行。

全程使用中文回复。git 命令本身保持英文。

执行原则

  1. 先检测,再动手。任何操作前,先运行 scripts/git_status_summary.py 拿到当前项目状态(是否 git 仓库、当前分支、未提交改动、与远程的领先/落后关系、最近提交)。
  2. 说人话,不甩命令。执行前用一句大白话告诉用户将做什么;执行后用大白话汇报结果,避免堆砌 raw git 输出。
  3. 危险操作必须确认。回滚、强制推送、删除分支、丢弃改动等不可逆操作,先列出「将执行的命令 + 影响范围 + 是否可撤销」,等用户明确同意后才执行。详见 references/dangerous-ops.md
  4. 不猜远程。没有配置 remote 时,引导用户配置或创建 GitHub 仓库,不要擅自 push。
  5. 当前目录即项目。所有 git 命令默认作用于当前工作目录的仓库,不要跨目录操作。

触发与意图识别

当用户用大白话表达 git 意图时(所有触发词均含 "git" 关键词),按下表归类到四大模块。完整关键词映射见 references/plain-to-git-mapping.md

| 用户说的话(示例) | 归类模块 | |---|---| | git备份 / git保存 / git提交一下 / git推上去 / git同步到 GitHub | 备份 | | git看看改了啥 / git有啥改动 / git我动了哪些文件 | 查询(改动) | | git看看历史 / git提交记录 / git谁改的 / git上次提交啥时候 | 查询(历史) | | git回退 / git撤销 / git回滚 / git恢复到之前 / git不要这次改动 | 回滚 | | git新建分支 / git开个分支搞新功能 / git切个分支 | 分支(创建/切换) | | git合并 / git把 xx 合过来 / git合到主分支 | 分支(合并) | | git看看有哪些分支 / git现在在哪个分支 | 分支(查询) |

识别到模块后,进入对应章节执行。无法确定意图时,用一句话向用户确认,不要猜。

模块一:备份(commit + push)

目标:把本地改动存档并同步到远程 GitHub。

流程

  1. 运行 scripts/git_status_summary.py,读取未提交改动清单。
  2. 若无改动 → 告诉用户"没有需要备份的改动",并提示是否只想 push 已有提交。
  3. 若有改动:
    • git diff --statgit diff --cached --stat 看改动概览。
    • 自动生成 commit 消息:根据改动文件和 diff 摘要,生成简洁中文 commit 消息(动词开头,如"修复登录页样式""新增导出功能")。把拟定的消息告诉用户,允许用户直接采用或修改。
    • 默认 git add -A 暂存全部改动;若用户只指定了部分文件,则只 add 指定文件。
    • 执行 git commit -m "<消息>"
  4. push 阶段:
    • 若有远程且当前分支有上游 → git push
    • 若有远程但无上游 → git push -u origin <当前分支>
    • 若无远程 → 进入「特殊情况:无远程」。
  5. 汇报:提交了什么、推送到哪、远程仓库地址。

注意

  • commit 消息不要写"update""wip"这种废话,要反映实际改动。
  • 用户说"先别推,只提交" → 跳过 push。
  • 用户说"强制推上去" → 进入危险操作确认流程(push --force-with-lease)。

模块二:查询(status / log / diff / blame)

目标:让用户看懂项目当前状态和历史。只读操作,无风险。

2.1 查改动

  • git status(人类可读的改动清单)
  • git diff(未暂存的具体改动)
  • git diff --cached(已暂存的具体改动)
  • 汇报时按"新增/修改/删除"分类说,不要直接贴一大坨 diff。

2.2 查历史

  • git log --oneline -n 20(最近 20 条提交,简洁模式)
  • 用户问"某文件谁改的" → git log --oneline -- <文件>git blame <文件>
  • 用户问"某次提交干了啥" → git show <commit>,用大白话总结改动。
  • 用户问"两个分支/版本差多少" → git log A..B --oneline + git diff --stat A B

2.3 查远程关系

  • git status 里的 ahead/behind 信息(status_summary 脚本已汇总)。
  • 用户问"远程有啥新东西" → git fetchgit log HEAD..origin/<分支> --oneline

模块三:回滚(reset / revert / restore)

⚠️ 高危模块。所有操作走危险操作确认流程。

先弄清用户想回滚什么,分三种场景:

3.1 丢弃未提交的改动(还没 commit)

  • 用户说"我改的不要了 / 恢复文件原样":
    • 未暂存改动 → git restore <文件>git restore .(全部)。
    • 已暂存改动 → 先 git restore --staged <文件> 取消暂存,再 restore。
  • git restore . / git checkout . / git clean -fd 属危险操作,必须确认。

3.2 撤销已提交但未 push 的 commit

  • 用户说"撤回刚才的提交,但保留改动" → git reset --soft HEAD~1
  • 用户说"撤回刚才的提交,改动放回工作区" → git reset --mixed HEAD~1(默认)。
  • 用户说"彻底干掉刚才的提交,改动也不要了" → git reset --hard HEAD~1(高危,必须确认)。
  • 回退 N 步 → HEAD~N

3.3 撤销已 push 的 commit

  • 优先用 git revert <commit>:生成一个反向提交,不改写历史,安全。
  • 只有在明确需要改写历史(如私有分支、协作方很少)且用户坚持时,才用 git push --force-with-lease。必须走危险确认。
  • 永远不要在不确认的情况下 force push 到 main/master。

回滚后用大白话说清:现在 HEAD 在哪、改动去哪了(保留/丢弃)、远程是否已同步。

模块四:分支(branch / switch / merge)

4.1 查询分支

  • git branch(本地)、git branch -a(含远程)。
  • 汇报当前所在分支,用星号或文字标明。

4.2 创建 + 切换分支

  • 用户说"新建分支 xx" → git switch -c <分支名>(或 git checkout -b)。
  • 分支名建议:用英文 kebab-case,如 feat/exportfix/login-bug。用户给中文名时,帮忙转成规范英文并告知。

4.3 切换分支

  • git switch <分支>
  • 若工作区有未提交改动会阻挡切换 → 提示用户三选一:commit / stash / 丢弃,不要擅自决定。

4.4 合并分支

  • 用户说"把 xx 合到当前" → git merge <分支>
  • 用户说"把当前合到 xx" → 先切到目标分支再 merge,或用 git merge 的反向,确认意图后执行。
  • 出现冲突 → 进入「特殊情况:合并冲突」。

4.5 删除分支

  • git branch -d <分支>(安全删,未合并会拒绝)。
  • git branch -D <分支>(强制删,高危,必须确认)。
  • 删除远程分支 git push origin --delete <分支>(高危,必须确认)。

特殊情况处理

当前目录不是 git 仓库

git_status_summary.py 会返回 NOT_A_REPO。此时:

  1. 告诉用户当前目录还没初始化 git。
  2. 问是否要 git init,以及是否要关联到 GitHub 远程。
  3. 用户同意后执行 git init,再按「无远程」流程引导配置远程。

无远程(未配置 remote)

  1. 告诉用户本地仓库没有关联 GitHub。
  2. 给出两个选项:
    • 已有 GitHub 仓库 → 提供 git remote add origin <仓库地址> 命令模板,请用户填地址。
    • 没有 GitHub 仓库 → 引导用户在 GitHub 创建空仓库后,把地址贴回来。
  3. 配好后首次 push 用 git push -u origin <分支>

合并冲突

  1. git status 列出冲突文件。
  2. 打开冲突文件,定位 <<<<<<< / ======= / >>>>>>> 标记。
  3. 用大白话解释冲突点,给出建议保留方案;不要擅自改用户的代码逻辑,只解决标记冲突。
  4. 解决后 git add <文件>git commit(merge)或 git rebase --continue(rebase)。
  5. 用户说"放弃合并" → git merge --abortgit rebase --abort

push 被拒(non-fast-forward)

  1. 说明远程有本地没有的提交。
  2. 建议先 git pull --rebase(保持线性历史),或 git pull(产生 merge commit)。
  3. 不要直接 force push,除非用户明确要求并走危险确认。

危险操作确认流程

对所有不可逆操作统一执行:

  1. 列出将执行的命令(完整命令文本)。
  2. 说明影响范围:会丢哪些数据、改写哪些历史、影响哪些远程分支。
  3. 说明可逆性:能否撤销、撤销难度。
  4. 等待用户明确同意("确认"/"继续"/"执行"等肯定词)才执行;模糊回答或沉默则不执行并再次询问。
  5. 执行后立即汇报结果。

危险操作完整清单见 references/dangerous-ops.md

Resources

scripts/

  • git_status_summary.py — 扫描当前项目 git 状态,输出结构化摘要(是否仓库、当前分支、改动文件、ahead/behind、最近 5 条提交、远程地址)。任何操作前先运行它,拿到状态再决定后续动作。可用 python scripts/git_status_summary.py 执行;也可直接读取其输出。

references/

按需加载,不必全部读入:

  • plain-to-git-mapping.md — 大白话关键词到 git 命令的完整映射表。意图不明确或需要更多关键词样例时加载。
  • dangerous-ops.md — 危险操作完整清单、风险分级、确认话术模板。执行任何回滚/强制操作前加载。
  • common-scenarios.md — 常见场景速查(首次备份、查看某文件历史、回退到指定提交、创建功能分支并开发完合并等完整流程示例)。遇到典型场景时可参考。

assets/

无。本 skill 不需要模板或静态资源文件。