Git 提交:用全栈技术打造智能 Commit Message 生成器

时间 :2026 年 3 月 10 日
标签:Node.js、Express、Vite、Tailwind CSS、Ollama、AI、Git 规范


引言:为什么我们需要"规范的 Git 提交信息"?

在现代软件开发中,Git 提交信息(Commit Message) 不仅是代码变更的记录,更是团队协作、项目追溯、自动化发布甚至绩效评估的重要依据。一个高质量的 Commit Message 能让:

  • 新人快速理解历史变更;
  • Leader 审核工作产出时有据可依;
  • CI/CD 流水线自动解析提交类型(feat、fix、docs 等);
  • 自动生成 CHANGELOG。

但现实是:很多开发者(尤其是新手)写出的提交信息如 update codefix bug,毫无信息量。于是,我萌生了一个想法:能否借助 AI,一键生成符合 Conventional Commits 规范的高质量提交信息?

于是,"Git 提交 AI 神器"项目诞生了!


项目架构:前后端分离 + 本地大模型

本项目采用典型的全栈架构,技术栈如下:

  • 前端:Vite + Vue/React(任选)+ Tailwind CSS + Axios

  • 后端:Node.js + Express

  • AI 引擎 :Ollama 部署的开源大模型 deepseek-r1:8b(支持推理能力)

  • 部署方式

    • 前端运行于 http://localhost:5173
    • 后端 API 伺服于 http://localhost:3000
    • Ollama API 暴露于 http://localhost:11434

整个系统通过 HTTP 请求链 串联:
前端 → 后端(Express) → Ollama(AI) → 返回智能 Commit Message


后端实现:Express 构建稳健 API

1. 初始化 Express 应用

ini 复制代码
const express = require('express');
const app = express();
const port = 3000;

// 解析 JSON 请求体(关键!否则 req.body 为 undefined)
app.use(express.json());

// 启用 CORS(解决跨域问题)
const cors = require('cors');
app.use(cors());

💡 注意 :Express 默认不解析请求体,必须手动添加 express.json() 中间件。否则 POST 请求的数据无法读取。

2. 设计核心 API 路由

我们提供一个 /generate-commit 接口,接收 diff 内容,返回 AI 生成的提交信息:

php 复制代码
app.post('/generate-commit', async (req, res) => {
  const { diff } = req.body;

  if (!diff) {
    return res.status(400).json({ error: 'Missing diff content' });
  }

  try {
    // 调用 Ollama API
    const aiResponse = await fetch('http://localhost:11434/api/generate', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        model: 'deepseek-r1:8b',
        prompt: `你是一个专业的 Git 提交信息生成器。请根据以下代码 diff 生成一条符合 Conventional Commits 规范的提交信息(英文):\n\n${diff}`,
        stream: false
      })
    });

    const result = await aiResponse.json();
    const commitMessage = result.response.trim();

    res.status(200).json({ commitMessage });
  } catch (err) {
    console.error(err);
    res.status(500).json({ error: 'AI service error' });
  }
});

3. 处理 HTTP 状态码

遵循 RESTful 规范,合理使用状态码:

  • 200 OK:成功生成
  • 400 Bad Request:缺少必要参数
  • 500 Internal Server Error:AI 服务异常

跨域问题:CORS 是"护照"

前端运行在 5173,后端在 3000端口不同即跨域。浏览器出于安全考虑会直接 block 请求。

解决方案:后端启用 CORS 中间件。

less 复制代码
app.use(cors()); // 允许所有来源(开发环境)
// 生产环境应指定 origin: ['https://yourdomain.com']

这相当于给前端"签发签证",浏览器放行请求。


前端实现:简洁 UI + 智能交互

使用 Vite 快速搭建前端,Tailwind CSS 实现美观界面:

ini 复制代码
<template>
  <div class="max-w-3xl mx-auto p-6">
    <h1 class="text-2xl font-bold mb-4">Git 提交 AI 神器 ✨</h1>
    <textarea 
      v-model="diff" 
      placeholder="粘贴你的 git diff 内容..." 
      class="w-full h-40 p-3 border rounded"
    ></textarea>
    <button 
      @click="generate" 
      :disabled="loading"
      class="mt-4 px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700"
    >
      {{ loading ? '生成中...' : 'AI 生成 Commit' }}
    </button>
    <div v-if="commitMessage" class="mt-4 p-3 bg-gray-100 rounded">
      <p class="font-mono">{{ commitMessage }}</p>
      <button @click="copy" class="mt-2 text-sm text-blue-600">复制</button>
    </div>
  </div>
</template>

<script setup>
import { ref } from 'vue';
import axios from 'axios';

const diff = ref('');
const commitMessage = ref('');
const loading = ref(false);

const generate = async () => {
  loading.value = true;
  try {
    const res = await axios.post('http://localhost:3000/generate-commit', {
      diff: diff.value
    });
    commitMessage.value = res.data.commitMessage;
  } catch (err) {
    alert('生成失败,请检查后端或 Ollama 是否运行');
  }
  loading.value = false;
};

const copy = () => {
  navigator.clipboard.writeText(commitMessage.value);
  alert('已复制到剪贴板!');
};
</script>

AI 集成:Ollama + DeepSeek-R1

Ollama 让本地运行大模型变得极其简单:

arduino 复制代码
ollama pull deepseek-r1:8b
ollama run deepseek-r1:8b  # 测试

其 API 与 OpenAI 兼容,只需 POST 到 /api/generate 即可获得推理结果。

为什么选 DeepSeek-R1?

它专为**推理(Reasoning)**优化,在代码理解、文本生成任务上表现优异,且 8B 参数可在消费级 GPU 上流畅运行。


开发体验优化

  • 使用 nodemon 监听文件变化,自动重启后端:

    vbscript 复制代码
    nodemon server.js
  • 使用 Apifox 测试 /generate-commit 接口,验证请求/响应结构。

  • 前端热更新(Vite)+ 后端热重载(Nodemon)= 极致开发效率。


总结:小工具,大价值

这个"Git 提交 AI 神器"虽小,却融合了:

  • 全栈开发(前端 + 后端)
  • HTTP 协议与 RESTful 设计
  • 跨域处理(CORS)
  • 本地大模型集成(Ollama)
  • 工程规范意识(Conventional Commits)

更重要的是,它降低了高质量 Git 提交的门槛,让每个开发者都能像资深工程师一样写出清晰、规范、有价值的提交信息。

未来可扩展方向:

  • 支持多语言 Commit(中文/英文切换)
  • 集成 VS Code 插件
  • 自动检测 diff 并建议提交类型

代码即文档,提交即履历。

用 AI 赋能开发习惯,从写好每一次 git commit 开始!

相关推荐
深海鱼在掘金12 小时前
Git 完全指南 —— 第3章:理解工作区、暂存区、版本库三个核心
git
江华森13 小时前
Git 基础筑基:从原理到团队协作的全栈实战
git
JakeJiang17 小时前
Git 必备命令指南:从日常高频到项目开发实战
git
用户946883150575018 小时前
一、elpis 基于 nodejs 实现服务端内核引擎
全栈
叫我少年2 天前
Windows 中安装 git
git
前端双越老师3 天前
我开发 AI Agent 项目踩过的 5个坑
前端·agent·全栈
飘尘5 天前
前端转型全栈(Java后端)的快速上手指引
前端·后端·全栈
onething3656 天前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 5 —— SSE 流式输出 + 打字机效果
人工智能·后端·全栈
onething3656 天前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 6 —— 业务完善 + 会话消息预览
人工智能·后端·全栈
东坡白菜7 天前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈