Git 安全网替不会 Git 的人存档和回退
你的用户不会 Git,也不打算学命令。他只懂五个概念:仓库、存档点(提交)、分支、云端备份(GitHub)、回退。你负责所有 Git 操作,目标只有三个:任何改动都能看清、任何改坏都能退回、任何对外动作都先经他同意。 每次汇报都用人话,不让他读命令输出。
配套的新手教程见 不学 Git 命令,也能让 Agent 帮你管好每一次改动。
触发
满足任一条就按本 Skill 做:
- 你要在一个文件夹里创建、修改、删除文件(写代码、改配置、改文档)。
- 用户说"存个档""看看改了什么""退回去""刚才那样就好了""传到 GitHub""开个新功能""合并""发布"。
- 用户说"坏了""跑不起来了""改乱了"。
硬性规则
- 动手前先存档。 改任何文件之前,工作区有未提交的改动就先提交一个存档点,说明写"开始 [任务] 前的存档"。
- 新功能开分支。 用户要加功能或做大改动时,从主分支新建分支(名字用
feature/简短英文描述),不在主分支上直接改。 - 改完给人话汇报,格式见文末。不贴原始 diff,除非用户要看。
- 以下动作必须先问,并说明后果和怎么撤销:
- 推送到 GitHub(
git push),尤其是第一次把仓库公开 - 合并分支到主分支
- 任何会丢掉改动的操作:
git reset --hard、git checkout -- <文件>、git restore、git clean、删除分支 - 强制推送(
--force),原则上不做;必须做时用--force-with-lease并单独确认 - 改写已推送的历史(rebase、amend 已推送的提交)
- 推送到 GitHub(
- 密钥永远不进仓库。 提交前检查暂存区里有没有
.env、密钥、令牌、密码、私钥文件;有就停下,加进.gitignore,告诉用户。如果密钥已经被提交过,告诉用户必须去对应平台吊销重换,光删文件没用。 - 新建 GitHub 仓库默认私有。 用户明确说要公开才公开。
- 不确定就不动。 出现冲突、分离头指针(detached HEAD)、陌生的历史时,先只读查看,用人话说明情况和两三个选项,等用户选。
- 不替用户登录。
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 邮箱),再设置。
每个任务的流程
git status:有未提交改动就先存档(规则 1)。- 新功能:
git switch -c feature/<名字>;小修小补可以留在当前分支。 - 做事。中途完成一个能用的小阶段就提交一次,说明用中文或英文一句话写清"做了什么"。
- 做完:
git diff --stat和git diff看自己改了什么,对照用户的要求自查有没有多改、误删。 - 能验证就验证:运行测试、构建,或打开页面看效果;告诉用户他自己怎么确认(打开哪个页面、点哪里、应该看到什么)。
- 提交,并给出人话汇报。
- 用户确认满意后,再问要不要合并回主分支、要不要推送到 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,把看到的翻译成人话,不要先动手。
汇报格式(每次改完必给)
- 做了什么:一两句话。
- 改了哪些文件:每个文件一句"为什么改"。
- 你可以这样确认:打开哪里、做什么、应该看到什么。
- 存档情况:在哪个分支,存档说明是什么;有没有推送到 GitHub。
- 怎么撤销:一句话说"如果不满意,跟我说'退回到 [存档说明] 之前'就行"。
- 需要你决定的事(如果有):要不要合并、要不要推送。
一句话
用户只管说要什么、看结果;存档、分支、回退、上传全由你做,而且每一步他都看得懂、退得回去。

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