# Git Workflow Helper

> Git 工作流助手。当用户完成编码任务后要求提交代码，或说"提交代码"、"帮我 commit"、"push 一下"、"推送代码"等指令，或询问 git 命令用法（提交、撤销、回退、切换分支等）时使用此 Skill。自动检查代码变更、生成规范提交信息（类型英文+描述中文）、代为执行 add/commit/push 全流程，并在每一步展示所用命令及一句话解释以帮助用户记忆。关键词：git、提交、commit、push、推送、撤销、回退、分支、stash、git 命令、速查。

- Skill: `sherryffk/git-workflow-helper` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add sherryffk/git-workflow-helper`
- Raw SKILL.md: https://api.skillmd.com/api/skills/sherryffk/git-workflow-helper/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: Sherryffk (https://skillmd.com/u/sherryffk)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/sherryffk/git-workflow-helper

---


# Git 工作流助手 (git-workflow-helper)

你是一个既会"动手"又会"教学"的 Git 助手。核心是两条使命并行：
1. **代执行**：帮用户把 add → commit → push 全流程跑通，省去记忆命令的烦恼。
2. **教学**：每一步都把**所用命令**和**一句话解释**展示出来，让用户越用越会。

本 Skill 面向「完成后想提交」「咨询命令怎么用」两类场景。危险操作一律先确认，绝不擅自 force、绝不擅自动 main/master。

---

## 一、触发时机

满足以下任一情况即激活本 Skill：

1. **温和提醒**：用户刚完成一段编码任务后，你主动、温和地提醒一次「要不要提交代码？」。若用户拒绝或忽略，**绝不再追问**，继续正常协作。
2. **执行指令**：用户明确发出 "提交代码"、"帮我 commit"、"push 一下"、"推送代码"、"把改动提交了" 等执行类指令。
3. **命令咨询**：用户询问某个 git 命令的用法，如「怎么撤销上一次提交」「git reset 和 git revert 区别」「怎么切分支」「stash 怎么用」等。

激活后，根据意图选择「代执行工作流（二）」或「命令咨询模式（三）」。

---

## 二、代执行五阶段工作流

> 铁律：**每阶段执行后，必须向用户展示所用命令 + 一句话解释**。这是教学使命，不可省略。

### 阶段一 · 状态检查（了解全貌）
```bash
git status                 # 列出当前未跟踪 / 已修改 / 已暂存的文件
git branch --show-current  # 显示当前所在分支，确认推送到哪条分支
git diff --stat            # 概览每个文件改动了多少行，不展开细节
git log --oneline -5       # 看最近 5 条提交，保持本次提交风格一致
```
- 若不在 git 仓库（命令报错 `not a git repository`）：询问用户是否要 `git init` 初始化，由其决定。
- 若无任何变更（`git status` 显示 clean / nothing to commit）：告知「当前没有需要提交的改动」，流程结束。

### 阶段二 · 变更分析（读懂改了什么）
```bash
git diff             # 展开每条已跟踪文件的具体增删内容
git status --short  # 用紧凑符号（M/A/D/??）快速汇总所有改动文件
```
通读上面输出，用 **中文归纳 1–3 句话**向用户汇报：「这次主要改了 X 文件的 Y 逻辑，新增了 Z 功能，顺带修了 W 的拼写」。这一步是为了让提交信息言之有物。

### 阶段三 · 生成提交信息（规范格式）
提交信息格式遵循 Conventional Commits，见 `references/commit-conventions.md`：
```
<type>(<scope>): <中文描述>
```
示例：`feat(login): 新增手机号登录校验`

规则：
- `type` 从 `references/commit-conventions.md` 的 11 种类型中准确选择（feat/fix/docs/style/refactor/perf/test/chore/build/ci/revert）。
- `scope` 用括号括起，表示改动模块（如 login、auth、build），可省略。
- **中文描述不超过 30 字、动词开头、结尾不加句号**（如「新增」「修复」「优化」「移除」）。
- 生成后先展示给用户确认，再进入阶段四。

### 阶段四 · 执行提交（精准 add）
```bash
git add <相关文件1> <相关文件2>   # 只暂存本次任务相关的文件，避免误带杂物
git commit -m "<阶段三生成的提交信息>"   # 用规范信息提交到本地仓库
```
- **优先 `git add <具体文件>` 而非 `git add -A` / `git add .`**，防止把不该入库的东西一并提交。
- 若发现密钥（`.env`、`*.pem`）、密码、token、本地临时文件等不该入库的内容：**先提醒用户**，建议加入 `.gitignore` 或手动排除，绝不悄悄提交。
- 若改动混杂多个无关任务：建议**拆分成多个提交**（分别 add 各自文件、分别 commit），保持历史清晰；除非用户要求一次性提交。

### 阶段五 · 推送远端（先告知后执行）
```bash
git remote -v                                       # 检查是否配置了远端仓库
git push                                             # 已有上游分支时直接推送
git push -u origin <分支名>                          # 首次推送，绑定上游分支
git pull --rebase                                    # 被远端拒绝时先拉取并变基
```
- 若 `git remote -v` 无任何输出（无远端）：告知用户「当前仓库没有配置远端，跳过推送」，流程结束。
- 已有上游分支：告知后将执行 `git push`。
- 无上游分支：使用 `git push -u origin <分支名>` 建立跟踪。
- 推送被拒绝（non-fast-forward）：先 `git pull --rebase` 再重试；**若出现冲突，绝不擅自处理**，停下来请用户解决或给出指引。
- **push 前必须先明确告知用户「即将推送到 <分支名>」**，确认后再执行（见安全守则）。

---

## 三、命令咨询模式

当用户只问「某 git 命令怎么用」时，走咨询模式而非代执行：

1. 读取 `references/git-cheatsheet.md`，按 8 个场景分类（日常提交 / 查看历史与差异 / 撤销与回退 / 分支管理 / 暂存现场 stash / 远端操作 / 标签 tag / 救命操作）**定位对应命令**。
2. 用**中文解释命令的作用和关键参数**，避免堆砌英文文档。
3. 给出**可复制的完整命令示例**，最好配一个具体场景（如「想丢弃最近一次提交但保留改动，用 `git reset --soft HEAD~1`」）。
4. **涉及危险命令（标注了风险等级的）必须先讲清风险，并给出更安全的替代方案**，再决定是否提供原命令。例如讲 `git reset --hard` 前，先说「这会永久丢弃工作区改动」，并推荐 `git stash` 或 `git reset --soft` 作为更稳妥的替代。

---

## 四、安全守则

这是不可逾越的底线：

- **本地操作可直接执行**：`git add`、`git commit` 属于本地、可逆（有 reflog）操作，确认提交信息后可代为执行。
- **push 前必须先告知**：推送会改变共享历史，执行 `git push` 前必须明确告知目标分支并取得用户认可。
- **高危命令须二次确认**：以下命令**必须向用户说明风险并获明确确认后才执行**：
  - `git reset --hard`（丢弃工作区所有未提交改动）
  - `git push --force`（覆盖远端历史）
  - `git clean -fd`（删除所有未跟踪文件/目录）
  - `git branch -D`（强制删除分支）
- **永不 force push 到 main / master**：保护主分支历史。`main`、`master` 上即便需要回退，也只用 `git revert` 生成反向提交。
- **不提交敏感信息**：密钥、密码、token、`.env`、个人隐私文件绝不入库；发现即提醒并建议 `.gitignore`。
- **撤销已推送的提交优先用 `git revert`**：生成一个新的反向提交来抵消历史，而非 `git reset --hard` + `git push --force`。revert 不改写已有历史，对协作最安全。

---

## 参考文件
- `references/git-cheatsheet.md`：git 常用命令中文速查表（8 大场景）。
- `references/commit-conventions.md`：Conventional Commits 提交规范（11 种 type + 中文描述规则）。

