본문으로 건너뛰기
🛠️ToolsShed

Git 커밋 메시지 생성기

타입, 스코프, 설명이 포함된 Conventional Commits 형식 메시지를 생성합니다.

이 도구 소개

Git 커밋 메시지 생성기는 Conventional Commits 규약을 따라 명확하고 표준화된 커밋 메시지 작성을 돕는 도구입니다. 이 형식은 버전 관리 로그를 읽기 쉽게 만들고, 자동 버전 관리 및 변경 로그 생성을 가능하게 하며, 프로젝트 전체에서 일관된 메시지 구조를 보장하여 팀 협업을 크게 향상시킵니다. 개인 프로젝트든 대규모 팀이든 적절한 형식의 커밋은 유지보수성과 추적 가능성을 위해 필수적입니다.

도구를 사용하려면 커밋 유형(feat, fix, docs, style, refactor, test, chore, perf)을 선택하고, 필요에 따라 코드베이스의 어느 부분이 변경되었는지 명확히 하는 범위(scope)를 추가합니다. 그 다음 변경 사항에 대한 간결한 설명을 작성하고, 선택적으로 더 자세한 본문이나 이슈 참조 같은 푸터 정보를 포함할 수 있습니다. 도구는 즉시 올바르게 형식화된 Conventional Commit 메시지를 생성하여 버전 관리 시스템에 바로 붙여넣을 수 있습니다.

개발자, DevOps 엔지니어, 오픈소스 유지보수자들은 의미있는 버전 관리 자동화와 전문적인 변경 로그 생성을 실현하는 Conventional Commits 채택으로부터 가장 큰 이점을 얻습니다. 일부 프로젝트는 커스텀 커밋 스타일을 선호할 수 있지만, Conventional Commits 형식은 CI/CD 도구, GitHub Actions, 의미있는 릴리스 플랫폼에서 광범위하게 지원되므로 현대적인 소프트웨어 워크플로우에 이상적입니다.

자주 묻는 질문

코드 구현

# 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.