3-5 透过 Cursor 协助生成 Commit 讯息

2025年4月19日

持續學習最新的 AI 應用
更多深入的 AI 內容,都在 E+ 成長計畫 👉前往了解

在现代软体开发中,版本控制是一个重要的环节。当完成一段程式码或测试后,需要将其 commit 并提交 pull request (PR),接着由其他团队成员进行 code review。

这样的流程带来几个好处:首先,若某段程式码在上线前测试时出现问题,我们可以透过回滚 (rollback) 来避免有问题的程式码持续存在于程式码库中;此外,提交 PR 并经过 code review,能确保程式码的整体品质更易于维护。

在这整个过程中,写好 commit 讯息会很重要。

在介绍如何使用 Cursor 生成 commit 讯息之前,想先谈一个重要的概念 — Conventional Commits。这并非某个强制规范,而是业界逐渐发展出的一种写 commit 讯息的方式。它的优点在于,当未来维护者需要回溯程式码历史时,能更容易找到特定的 commit。

许多人在撰写 commit 讯息时,常常会用模糊的描述,例如「add a new feature」(新增功能) 或「update a feature」(更新功能)。这样的讯息对于未来的维护者来说,往往难以理解具体内容。当需要快速定位某个有问题的 commit 时,如果讯息全是「新增功能」「更新功能」,在茫茫 commit 纪录中几乎无从下手。因此, Conventional Commits 应运而生。

image
圖片來源:Conventional Commits 介绍

Conventional Commits 的具体做法

Conventional Commits 的方式是在 commit 讯息前加上一个 prefix (前缀),用以分类 commit 的类型。

举例来说:

  • fix:修复某个 bug。
  • feat:实现某个新功能 (feature 的缩写)。
  • 其他常见前缀:如  **docs (**新增文件)、refactor (重构程式码)、test (撰写测试) 等。

有了这些前缀,其他维护者在查找特定 commit 时,就能快速根据类型筛选,过滤掉不相关的纪录。例如,想找修复 bug 的 commit,直接搜寻以「fix」开头的讯息即可。除了前缀外,commit 讯息的内容也需明确具体,避免过于笼统。例如,不要只写「修了个 bug」,而应写「fix: 修复登入页面按钮无反应的问题」,这样未来查看时会更一目了然。

在 Cursor 中生成 Commit 讯息

了解 Conventional Commits 后,我们接着来看如何在 Cursor 中快速生成符合规范的 commit 讯息。以一个实际情境为例,假设我在 Git 侧边栏中看到两个改动,一个是修改文件,另一个是新增测试。我会先将改动 stage (暂存) 起来,接着在 commit 栏位中点击「Generate Commit Message」按钮。

在 Cursor 中生成 Commit 讯息
在 Cursor 中生成 Commit 讯息

Cursor 会自动生成一条讯息,例如「test: 新增 memorize 函数的单元测试」。如果讯息没问题,直接点击 commit 即可完成。

为了让生成的讯息更易读、未来方便找,推荐每次 commit 的范围尽量小,避免在单个 commit 中混杂多种类型的改动。例如,修改文件和新增测试应分开 commit,而不是一次提交。将同一类型的改动 stage 在一起,再生成讯息,这样 prefix (前缀) 会更一致,内容也更聚焦。

确保 Cursor 遵循规范

若发现 Cursor 生成的讯息未遵循 Conventional Commits,可以透过设定 Cursor Rules 来修正。在设定页面的「Rules」选项中,编辑 user rules,加入提示词,例如:「生成 commit 讯息时,需遵循 Conventional Commits 规范,使用适当的 prefix(如 feat、fix、test 等)并提供明确具体的描述。」这样能确保 Cursor 会按照规范生成讯息,既符合规范又清晰易懂。

在 Cursor Rules 中设定 Conventional Commits 规范
在 Cursor Rules 中设定 Conventional Commits 规范

此系列文章为 《给工程师的 Cursor 工作流 — 透过 AI 代理全方位提升开发生产力》 搭配的教材。希望透过这系列文章,将过去协助导入 AI 工具及使用 Cursor 的经验扩展并分享给想提升生产力的读者。如果对课程感兴趣的读者,可以加入 E+ 成长计划,观看影片学习。

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們