智能 Git 操作助手

Polar Sponsor
爱发电 赞助
.NET 9.0

>-智能 Git 操作助手:安全提交、合并分支、检测冲突并提供处理建议、生成可视化报告。

Git 安全操作助手 (git-merge-assistant)

功能概述

Git 安全操作助手 (git-merge-assistant)是一项面向实际任务的技能,主要用于本 Skill 的核心目标是让 Git 操作 安全、可追溯、可视化;安全第一 :所有写操作(add/commit/merge/rebase/push)前必须 请求用户确认;

核心要点

  • 可追溯 :操作前保存 HEAD hash 和完整 diff,提供回退命令;
  • 可视化 :每次操作后生成操作报告(优先 HTML,降级为 Mar。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。

结果检查与注意事项

执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

Git 安全操作助手 (git-merge-assistant)

核心原则

本 Skill 的核心目标是让 Git 操作安全、可追溯、可视化。

  • 安全第一:所有写操作(add/commit/merge/rebase/push)前必须请求用户确认
  • 可追溯:操作前保存 HEAD hash 和完整 diff,提供回退命令
  • 可视化:每次操作后生成操作报告(优先 HTML,降级为 Markdown)
  • 最小提交:每次提交只包含一个逻辑变更
  • 不盲目自动化:复杂冲突(同一区域被双方修改)不自动解决,提示用户手动介入

支持的交互模式

模式 触发语 说明
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 步工作流

必须严格按照以下 10 个步骤顺序执行。

Step 0: 模式识别与用户确认

  1. 根据用户描述判断操作模式。如果不确定,列出可能模式让用户选择。
  2. 如果是合并/变基操作,确认源分支和目标分支。
  3. 如果是提交类操作,列出当前所有变更文件,说明哪些是目标文件、哪些会被暂存。
  4. 关键确认:在执行任何写操作之前,展示将要执行的命令并请求用户确认(y/n)。

Step 1: 预检查(Pre-flight Checks)

在执行操作前,检查以下风险并汇总警告:

# 检查是否有未保存的 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 "⚠️ 发现敏感关键词,请确认是否应提交"

汇总警告信息并询问用户是否继续。如果用户选择否,停止操作。

Step 2: 暂存非目标文件 + 保存快照

目标文件识别逻辑:

  • commit 模式:目标 = 所有已跟踪文件的变更(git diff --name-only 列出的文件),未跟踪文件不自动提交
  • commit-file 模式:用户明确指定的文件为目标,其余变更暂存
  • merge/rebase 模式:先处理工作区变更,防止脏工作区干扰

执行暂存(包含未跟踪文件):

git stash push -u -m "stash-before--"

保存快照:

# 记录当前 HEAD(供后续回退使用)
git rev-parse HEAD > .git-pre-operation-hash
# 保存工作区完整 diff(相对 HEAD)
git diff > .git-operation-snapshot.diff

记录操作前 HEAD hash,用于报告中生成回退命令。

Step 3: 拉取远程更新

git fetch origin
  • 对 merge/rebase:确保源分支和目标分支的远程状态最新
  • 对 push:先 fetch,检查是否落后于远程。若落后,提示先 pull/merge
  • 对 commit:检查是否有远程更新需要先合并

Step 4: 分析差异

执行以下命令并向用户呈现结果:

git status --short
git diff --stat
git diff

分析要点(告知用户):

  • 变更文件列表及类型(新增/修改/删除)
  • 变更行数统计
  • 是否有调试代码、临时注释等不应提交的内容
  • 如果是合并模式,分析两个分支的差异范围

Step 5: 执行操作(需用户确认)

展示将要执行的核心命令,请求用户确认。只有用户输入 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,否则不执行任何推送操作。

Step 6: 冲突检测与处理

执行 merge/rebase 后,检查冲突:

git diff --name-only --diff-filter=U   # 列出冲突文件

若无冲突:继续 Step 7。

若有冲突:

  1. 不自动解决。对每个冲突文件,显示冲突区块(<<<<<<< 标记的区域)。
  2. 生成冲突报告:
    • 冲突文件列表
    • 每个冲突文件中的冲突行号及双方内容
    • 建议:保留本地 / 保留远程 / 手动合并
  3. 备份原始冲突文件:
    mkdir -p .git-conflict-backup-$(date +%s)
    cp  .git-conflict-backup-*/
    
  4. 提示用户手动处理:
    检测到 2 个冲突文件。请手动编辑解决,完成后输入 'done' 继续。
    编辑命令:vim src/login.py
    
  5. 等待用户输入 done,然后验证所有冲突标记已解决(无 <<<<<<< 残留)。
  6. 执行 git add 标记已解决。
  7. 对于 merge 模式,继续 git commit(生成默认合并消息);对于 rebase,执行 git rebase --continue。

Step 7: 提交消息生成与用户确认

这是用户特别要求的步骤 — 不直接提交,先生成消息给用户确认。

  1. 根据变更文件列表和 diff 统计,生成一个默认消息模板:

    • 单文件变更:[] 修改了 <文件名>
    • 多文件变更:[] 更新了 <模块名> 相关功能
  2. 展示消息给用户审查:

    请审阅提交消息(第一行不超过 72 字符):
    ————————————————————————————————
    [fix] 修复登录验证逻辑
    
    详细说明(可选):
    - 修复了空密码导致的崩溃
    
    ————————————————————————————————
    输入 'y' 确认提交,输入 'n' 取消提交,或直接输入新的提交消息:
    
  3. 用户选择:

    • y/yes → 执行 git commit -m "<消息>"
    • n/no → 撤回提交(不执行 commit,恢复到操作前状态),告知用户已取消
    • 输入其他内容 → 使用用户输入的内容作为提交消息,然后执行 commit
  4. 提交消息推荐格式(不强求,作为建议):

    (): <简短描述>
    
    <详细说明(可选)>
    
type 说明
feat 新功能
fix 修复
refactor 重构
docs 文档
style 格式调整
chore 杂项
merge 合并分支

Step 8: 恢复暂存文件

如果 Step 2 中暂存了非目标文件,现在恢复:

git stash pop --index

如果恢复时有冲突(暂存的文件与当前工作区有重叠),提示用户手动解决。

Step 9: 生成操作报告

优先尝试 HTML 报告:

如果 scripts/generate_git_report.py 存在且 Python3 可用,生成 HTML 报告:

python3 /scripts/generate_git_report.py 
  --repo-path  
  --output /git-report-.html 
  --operation "" 
  --commit-range ..

降级方案(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 /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 "- 操作:"
  echo "- 时间:$(date)"
  echo ""
  echo "## 提交记录"
  git log --oneline -5
  echo ""
  echo "## 文件变更"
  git diff --stat HEAD~1..HEAD
  echo ""
  echo "## 回退命令"
  echo "git reset --hard "
  echo "git stash pop"
} > report.md

安全回退指南

每次操作报告中都会提供回退命令。用户也可主动要求回退:

用户:回退上一次操作
助手:根据保存的快照,执行以下命令即可恢复:
  git reset --hard $(cat .git-pre-operation-hash)
  git stash pop

建议用户定期清理 .git-pre-operation-* 和 .git-conflict-backup-* 文件。

相关专题

更多
git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

2281

6

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

2517

7

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

2023.07.24

714

5

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

2023.07.06

1260

6

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

2023.07.05

3859

9

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

0

14

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

2026.11.02

0

17

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

2026.11.02

0

17

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 8.1万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.9万人学习