把这个 Skill 交给你的 Agent

复制下面的提示词,粘贴给 Claude Code、Codex 或任何能读网页的 Agent。它会替你装好,并告诉你这个 Skill 做什么。

请帮我安装这个 skill。

先阅读 https://cwyz.com/zh/skills/git-safety-net
原始 SKILL.md 在 https://cwyz.com/api/skills/git-safety-net/raw

把它保存为我的 skills 目录下的 git-safety-net/SKILL.md(Claude Code:所有项目通用放 ~/.claude/skills/,只用于当前项目放 .claude/skills/)。

装好后用两句话告诉我它做什么、什么时候会用到。在我确认之前,不要执行它里面描述的任何操作。

也可以把下载的压缩包解压到 ~/.claude/skills/(所有项目)或项目里的 .claude/skills/。 Skill 是在指挥 Agent 做事。装之前先读一遍,不是你自己写的尤其要读。

Git 安全网替不会 Git 的人存档和回退

当用户不懂 Git,而你要在文件夹里改文件、写代码,或用户说存档、看看改了什么、退回去、传到 GitHub、合并时使用。动手前先存档,新功能开分支,改完用人话汇报和撤销方法;上传、公开、合并和任何会丢改动的操作都先问;密钥永不进仓库。

应用场景让 Agent 替不会 Git 的你管好每一次改动:改前存档、改后说明、改坏能退、上传先问。

Git 安全网替不会 Git 的人存档和回退

你的用户不会 Git,也不打算学命令。他只懂五个概念:仓库、存档点(提交)、分支、云端备份(GitHub)、回退。你负责所有 Git 操作,目标只有三个:任何改动都能看清、任何改坏都能退回、任何对外动作都先经他同意。 每次汇报都用人话,不让他读命令输出。

配套的新手教程见 不学 Git 命令,也能让 Agent 帮你管好每一次改动。

触发

满足任一条就按本 Skill 做:

  • 你要在一个文件夹里创建、修改、删除文件(写代码、改配置、改文档)。
  • 用户说"存个档""看看改了什么""退回去""刚才那样就好了""传到 GitHub""开个新功能""合并""发布"。
  • 用户说"坏了""跑不起来了""改乱了"。

硬性规则

  1. 动手前先存档。 改任何文件之前,工作区有未提交的改动就先提交一个存档点,说明写"开始 [任务] 前的存档"。
  2. 新功能开分支。 用户要加功能或做大改动时,从主分支新建分支(名字用 feature/简短英文描述),不在主分支上直接改。
  3. 改完给人话汇报,格式见文末。不贴原始 diff,除非用户要看。
  4. 以下动作必须先问,并说明后果和怎么撤销:
    • 推送到 GitHub(git push),尤其是第一次把仓库公开
    • 合并分支到主分支
    • 任何会丢掉改动的操作:git reset --hard、git checkout -- <文件>、git restore、git clean、删除分支
    • 强制推送(--force),原则上不做;必须做时用 --force-with-lease 并单独确认
    • 改写已推送的历史(rebase、amend 已推送的提交)
  5. 密钥永远不进仓库。 提交前检查暂存区里有没有 .env、密钥、令牌、密码、私钥文件;有就停下,加进 .gitignore,告诉用户。如果密钥已经被提交过,告诉用户必须去对应平台吊销重换,光删文件没用。
  6. 新建 GitHub 仓库默认私有。 用户明确说要公开才公开。
  7. 不确定就不动。 出现冲突、分离头指针(detached HEAD)、陌生的历史时,先只读查看,用人话说明情况和两三个选项,等用户选。
  8. 不替用户登录。 gh auth login 这类交互式登录让用户自己在终端里跑,你告诉他每一步选什么。

开工检查(每个新文件夹第一次做)

git --version                 # 没装:告诉用户去 https://git-scm.com/downloads 下载,或 macOS 运行 xcode-select --install
git rev-parse --is-inside-work-tree 2>/dev/null || echo "not a repo"
git config user.name; git config user.email
  • 不是仓库:问用户"要把这个文件夹交给 Git 管吗?",同意后 git init,并按项目类型生成 .gitignore(至少包含 .env、node_modules/、.DS_Store、构建产物目录),然后提交第一个存档点"初始存档"。
  • 没有用户名或邮箱:问用户想用什么名字和邮箱(可以用 GitHub 提供的 noreply 邮箱),再设置。

每个任务的流程

  1. git status:有未提交改动就先存档(规则 1)。
  2. 新功能:git switch -c feature/<名字>;小修小补可以留在当前分支。
  3. 做事。中途完成一个能用的小阶段就提交一次,说明用中文或英文一句话写清"做了什么"。
  4. 做完:git diff --stat 和 git diff 看自己改了什么,对照用户的要求自查有没有多改、误删。
  5. 能验证就验证:运行测试、构建,或打开页面看效果;告诉用户他自己怎么确认(打开哪个页面、点哪里、应该看到什么)。
  6. 提交,并给出人话汇报。
  7. 用户确认满意后,再问要不要合并回主分支、要不要推送到 GitHub。

用户说一句话,你做什么

用户说 你做 注意
存个档 git add -A 后提交,说明写清当前状态 先查密钥(规则 5)
看看改了什么 git diff、git log --oneline -10,用人话总结 按文件说"加了什么、删了什么、为什么"
刚才的改动不要了(还没存档) 先列出会丢掉哪些文件的哪些改动,确认后 git restore . 新建的文件要另外 git clean,同样先列清单
退回到上一个存档 已推送的用 git revert(新增一个反向提交,不改历史);没推送的可以 git reset,先说清区别让用户选 不确定就用 revert
退回到某天的样子 git log 找到那个存档,新建分支 git switch -c rescue/<日期> <提交> 先看看 不直接改主分支
好像丢了东西 git reflog 找回最近所有位置,新建分支恢复 这是最后的救命绳,先只读查
传到 GitHub 没有远程仓库:gh repo create <名字> --private --source=. --push;有:git push 先问,规则 4、6
开个新功能 存档后 git switch -c feature/<名字>
合并 切回主分支 git merge feature/<名字>;有冲突按规则 7 合并前再跑一次验证
两个 Agent 同时干活 每个 Agent 一个分支,用 git worktree add ../<目录> -b <分支> 分开工作目录 合并前检查两边有没有改同一个文件

遇到问题

  • 合并冲突:列出冲突的文件,每个冲突用人话说"你这边是……,另一边是……",给出建议的合并结果,等用户确认再写入。
  • 推送被拒(远程有新提交):先 git pull --rebase;有冲突按上一条处理。不要强制推送。
  • 误提交了密钥:立即告诉用户吊销重换;再从仓库里移除并加进 .gitignore。已推送到公开仓库的,按泄露处理。
  • 看不懂的状态:只读运行 git status、git log --oneline --graph -15、git branch -a,把看到的翻译成人话,不要先动手。

汇报格式(每次改完必给)

  1. 做了什么:一两句话。
  2. 改了哪些文件:每个文件一句"为什么改"。
  3. 你可以这样确认:打开哪里、做什么、应该看到什么。
  4. 存档情况:在哪个分支,存档说明是什么;有没有推送到 GitHub。
  5. 怎么撤销:一句话说"如果不满意,跟我说'退回到 [存档说明] 之前'就行"。
  6. 需要你决定的事(如果有):要不要合并、要不要推送。

一句话

用户只管说要什么、看结果;存档、分支、回退、上传全由你做,而且每一步他都看得懂、退得回去。

读完了?标记一下,记录学习进度。登录
收藏起来,稍后再看登录
对这篇有疑问?向 Ask AI 提问

评论(0)

还没有评论,来说第一句。

登录后参与讨论。登录