本 Skill 的核心目标是让 Git 操作安全、可追溯、可视化。
| 模式 | 触发语 | 说明 |
|---|---|---|
| ------ | -------- | ------ |
commit | "帮我提交代码"、"commit"、"提交" | 提交工作区所有已跟踪文件的变更 |
commit-file | "提交 src/main.py"、"只提交 docs/" | 只提交指定文件/目录 |
merge | "把 feature 合并到 master"、"merge" | 分支合并(非 fast-forward 时需处理冲突) |
rebase | "变基 feature 到 master"、"rebase" | 分支变基 |
push | "推送代码"、"push" | 推送当前分支到远程 |
all-in-one | "提交并推送"、"commit and push" | 先提交后推送 |
注意:push 模式仅在用户明确要求时执行。默认行为是只提交不上传。
必须严格按照以下 10 个步骤顺序执行。
在执行操作前,检查以下风险并汇总警告:
# 检查是否有未保存的 IDE 临时文件
git ls-files --others --exclude-standard | grep -E "\.(swp|swo|~)$" && echo "⚠️ 发现未保存的临时文件"
# 检查是否有大文件(>1MB)
find . -type f -size +1M ! -path "./.git/*" | head -5 && echo "⚠️ 存在大文件,建议使用 Git LFS"
# 检查敏感信息(密码、密钥等)
git diff --cached | grep -iE "password|secret|api_key|token" && echo "⚠️ 发现敏感关键词,请确认是否应提交"
汇总警告信息并询问用户是否继续。如果用户选择否,停止操作。
目标文件识别逻辑:
commit 模式:目标 = 所有已跟踪文件的变更(git diff --name-only 列出的文件),未跟踪文件不自动提交commit-file 模式:用户明确指定的文件为目标,其余变更暂存merge/rebase 模式:先处理工作区变更,防止脏工作区干扰执行暂存(包含未跟踪文件):
git stash push -u -m "stash-before-<operation>-<timestamp>"
保存快照:
# 记录当前 HEAD(供后续回退使用)
git rev-parse HEAD > .git-pre-operation-hash
# 保存工作区完整 diff(相对 HEAD)
git diff > .git-operation-snapshot.diff
记录操作前 HEAD hash,用于报告中生成回退命令。
git fetch origin
merge/rebase:确保源分支和目标分支的远程状态最新push:先 fetch,检查是否落后于远程。若落后,提示先 pull/mergecommit:检查是否有远程更新需要先合并执行以下命令并向用户呈现结果:
git status --short
git diff --stat
git diff
分析要点(告知用户):
展示将要执行的核心命令,请求用户确认。只有用户输入 y/yes 才执行。
示例:
即将执行:
模式:commit
命令:git add -u && git commit -m "<待编辑消息>"
目标文件:src/main.py, src/utils.py
将暂存非目标文件:tests/test_main.py
是否继续?(y/n)
不同模式的命令:
| 模式 | 命令 |
|---|---|
| ------ | ------ |
| commit | git add -u → git commit -m " |
| commit-file | git add → git commit -m " |
| merge | git checkout → git merge |
| rebase | git checkout → git rebase |
| push | git push origin |
| all-in-one | 先执行 commit,成功后询问是否 push |
只提交不上传:除非用户明确要求 push,否则不执行任何推送操作。
执行 merge/rebase 后,检查冲突:
git diff --name-only --diff-filter=U # 列出冲突文件
若无冲突:继续 Step 7。
若有冲突:
<<<<<<< 标记的区域)。```bash
mkdir -p .git-conflict-backup-$(date +%s)
cp
```
```
检测到 2 个冲突文件。请手动编辑解决,完成后输入 'done' 继续。
编辑命令:vim src/login.py
```
done,然后验证所有冲突标记已解决(无 <<<<<<< 残留)。git add 标记已解决。git commit(生成默认合并消息);对于 rebase,执行 git rebase --continue。这是用户特别要求的步骤 — 不直接提交,先生成消息给用户确认。
[] 修改了 <文件名> [] 更新了 <模块名> 相关功能 ```
请审阅提交消息(第一行不超过 72 字符):
————————————————————————————————
[fix] 修复登录验证逻辑
详细说明(可选):
————————————————————————————————
输入 'y' 确认提交,输入 'n' 取消提交,或直接输入新的提交消息:
```
y/yes → 执行 git commit -m "<消息>"n/no → 撤回提交(不执行 commit,恢复到操作前状态),告知用户已取消```
<详细说明(可选)>
```
| type | 说明 |
|---|---|
| ------ | ------ |
| feat | 新功能 |
| fix | 修复 |
| refactor | 重构 |
| docs | 文档 |
| style | 格式调整 |
| chore | 杂项 |
| merge | 合并分支 |
如果 Step 2 中暂存了非目标文件,现在恢复:
git stash pop --index
如果恢复时有冲突(暂存的文件与当前工作区有重叠),提示用户手动解决。
优先尝试 HTML 报告:
如果 scripts/generate_git_report.py 存在且 Python3 可用,生成 HTML 报告:
python3 <skill-path>/scripts/generate_git_report.py \
--repo-path <repo-path> \
--output <report-path>/git-report-<timestamp>.html \
--operation "<operation>" \
--commit-range <start-hash>..<end-hash>
降级方案(Markdown):
如果 HTML 脚本不可用或执行失败,自动生成 Markdown 格式报告(输出到控制台或保存为 .md 文件):
# Git 操作报告
- 操作时间:2025-05-25 10:30:00
- 操作类型:merge (feature/login → master)
- 操作前 commit:a1b2c3d
- 操作后 commit:d4e5f6g
## 变更统计
| 文件 | 新增行 | 删除行 |
|------|--------|--------|
| src/login.py | +15 | -3 |
## 冲突处理
- 冲突文件:无
## 回退命令
如需回退到此操作前状态,执行:
git reset --hard a1b2c3d
git stash pop # 若之前有 stash
报告必须包含回退命令,以操作前保存的 HEAD hash 生成回退指南。
用户:帮我提交代码
助手:
1. 模式:commit
2. 当前变更文件:src/main.py(+42-10), src/utils.py(+5-2), tests/test_main.py(+20-0)
目标文件:所有已跟踪文件的变更
暂存文件:无(所有变更都是目标)
3. 预检查:无警告
4. 暂存并保存快照...
5. fetch origin... 已是最新
6. 差异分析:3 个文件被修改,共 +67 -12 行
7. 即将执行:git add -u && git commit -m "<待编辑>"
是否继续?y
8. 请编辑提交消息:[feat] 增加用户认证模块
确认提交?(y/n/编辑) y
9. 提交成功。恢复暂存...
10. 生成报告(含回退命令)...
操作完成。是否推送?(y/n) n
用户:把 feature/payment 合并到 develop
助手:
1. 模式:merge,源=feature/payment,目标=develop
2. 预检查:无警告
3. 暂存当前工作区(如有)...
4. fetch origin
5. 分析差异:两分支共有 3 个文件可能冲突
6. 即将执行:git checkout develop && git merge feature/payment
是否继续?y
7. 检测到冲突:src/payment.py 第 45-52 行
冲突内容:if amount > 100 (HEAD) vs if amount >= 100 (feature/payment)
已备份原始冲突文件到 .git-conflict-backup-xxx/
请手动解决冲突,完成后输入 'done'。
编辑命令:vim src/payment.py
8. 用户完成,验证无冲突标记,执行 git add
9. 生成合并提交消息,确认后提交
10. 恢复暂存...
11. 生成报告(含冲突详情和回退命令)
本 Skill 捆绑了 HTML 报告生成脚本。当需要生成报告时,读取并执行 scripts/generate_git_report.py。
脚本路径相对于 SKILL.md:scripts/generate_git_report.py
python3 <skill-path>/scripts/generate_git_report.py \
--repo-path /path/to/repo \
--output /path/to/report.html \
--operation "merge: feature/login -> master" \
--commit-range HEAD~3..HEAD \
--pre-hash a1b2c3d
参数说明:
--repo-path:Git 仓库路径(必填)--output:输出 HTML 文件路径(必填)--operation:操作描述(必填)--commit-range:要展示的 commit 范围,如 HEAD~3..HEAD(可选)--conflict-files:冲突文件列表,逗号分隔(可选)--pre-hash:操作前 HEAD hash,用于生成回退命令(可选)如果 Python3 或脚本不可用,使用以下命令生成 Markdown 报告:
{
echo "# Git 操作报告"
echo "- 操作:<operation>"
echo "- 时间:$(date)"
echo ""
echo "## 提交记录"
git log --oneline -5
echo ""
echo "## 文件变更"
git diff --stat HEAD~1..HEAD
echo ""
echo "## 回退命令"
echo "git reset --hard <pre-hash>"
echo "git stash pop"
} > report.md
每次操作报告中都会提供回退命令。用户也可主动要求回退:
用户:回退上一次操作
助手:根据保存的快照,执行以下命令即可恢复:
git reset --hard $(cat .git-pre-operation-hash)
git stash pop
建议用户定期清理 .git-pre-operation- 和 .git-conflict-backup- 文件。
共 1 个版本