Lewati ke konten
πŸ› οΈToolsShed

Generator Pesan Commit Git

Buat pesan berformat Conventional Commits dengan tipe, cakupan, dan deskripsi.

Tentang alat ini

Generator Pesan Commit Git membantu pengembang menulis pesan yang jelas dan terstandar mengikuti spesifikasi Conventional Commits. Format ini membuat log kontrol versi mudah dibaca, memungkinkan pembangkitan versi otomatis dan changelog, serta meningkatkan kolaborasi tim dengan menjamin struktur pesan yang konsisten di seluruh proyek. Baik Anda bekerja sendiri atau dalam tim besar, pesan commit yang diformat dengan baik sangat penting untuk kemudahan perawatan dan keterlacakan.

Untuk menggunakan alat ini, pilih tipe commit (feat, fix, docs, style, refactor, test, chore, atau perf), tambahkan cakupan opsional untuk memperjelas bagian mana dari basis kode yang berubah, tulis deskripsi singkat dari perubahan, dan secara opsional sertakan badan dengan detail lebih lanjut atau informasi catatan kaki seperti referensi masalah. Alat ini segera menghasilkan pesan Conventional Commit yang diformat dengan benar yang dapat Anda salin dan tempel langsung ke sistem kontrol versi Anda.

Pengembang, insinyur DevOps, dan pengelola proyek sumber terbuka mendapat manfaat paling besar dari mengadopsi Conventional Commits karena memungkinkan otomasi versionning semantik dan pembuatan changelog profesional. Meskipun beberapa proyek mungkin lebih suka gaya commit khusus, format Conventional Commits didukung secara luas oleh alat CI/CD, GitHub Actions, dan platform rilis semantik, menjadikannya ideal untuk alur kerja perangkat lunak modern.

Pertanyaan yang Sering Diajukan

Implementasi Kode

# Generate Conventional Commit messages programmatically
# No external library needed β€” plain string formatting

from dataclasses import dataclass, field
from typing import Optional

@dataclass
class CommitMessage:
    type: str                          # feat | fix | docs | style | refactor | test | chore ...
    description: str
    scope: Optional[str] = None
    body: Optional[str] = None
    breaking_change: Optional[str] = None
    footer: list[str] = field(default_factory=list)

    def render(self) -> str:
        # Header: type(scope)!: description
        scope_str = f"({self.scope})" if self.scope else ""
        bang      = "!" if self.breaking_change else ""
        header    = f"{self.type}{scope_str}{bang}: {self.description}"

        parts = [header]
        if self.body:
            parts.append("")
            parts.append(self.body)

        trailers = list(self.footer)
        if self.breaking_change:
            trailers.append(f"BREAKING CHANGE: {self.breaking_change}")
        if trailers:
            parts.append("")
            parts.extend(trailers)

        return "\n".join(parts)


# Example usage
msg = CommitMessage(
    type="feat",
    scope="auth",
    description="add OAuth2 login support",
    body="Implements Google and GitHub OAuth2 providers.\nUpdates the session schema.",
    breaking_change="remove legacy /login endpoint",
    footer=["Reviewed-by: Alice <alice@example.com>"],
)
print(msg.render())
# feat(auth)!: add OAuth2 login support
#
# Implements Google and GitHub OAuth2 providers.
# Updates the session schema.
#
# Reviewed-by: Alice <alice@example.com>
# BREAKING CHANGE: remove legacy /login endpoint

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.