동료들이 작성한 깃허브 커밋 메시지가 제각각이라 코드 변경 이력을 파악하기 어렵다고 느낄 때가 있습니다. 변경 사항의 의도가 명확하지 않아 누가, 언제, 왜 이 코드를 수정했는지 추적하는 데 많은 시간을 쏟게 됩니다. 이는 결국 협업 효율성을 저하시키는 주요 원인이 됩니다.
함께 보면 좋은 글: 노션 API 자동화, 반복 업무 싹 없애는 예제 모음
이처럼 깃허브 커밋 메시지가 통일되지 않으면, 프로젝트의 히스토리가 뒤죽박죽이 되어 코드 리뷰나 문제 발생 시 디버깅 과정에서 혼란을 겪기 쉽습니다. 이 글에서는 명확하고 일관성 있는 깃허브 커밋 메시지 작성을 위한 컨벤션을 설정하고 적용하는 구체적인 방법과 실제 사례를 분석하여, 여러분의 개발 협업 환경을 한 단계 업그레이드하는 방법을 제시합니다.
- 깃 커밋 메시지 컨벤션의 중요성과 필요성을 이해합니다.
- 다양한 커밋 메시지 컨벤션의 구조와 작성 규칙을 학습합니다.
- 실제 프로젝트에 적용할 수 있는 효과적인 컨벤션 설정 방법을 익힙니다.
- 협업 효율성을 높이는 커밋 메시지 작성 팁을 얻습니다.
협업 시 엉망인 깃 커밋 메시지를 통일된 컨벤션으로 관리하면 코드 리뷰 효율성을 높이고, 잠재적인 오류를 줄여 개발 생산성을 크게 향상시킬 수 있습니다.
왜 깃 커밋 메시지 컨벤션이 필요할까요?
개발 과정에서 발생하는 수많은 코드 변경 사항은 깃허브 커밋 메시지를 통해 기록됩니다. 만약 이 메시지들이 제각각이라면, 마치 아무런 규칙 없이 쓰인 일기장을 읽는 것과 같습니다. 어떤 내용은 짧게 '수정'이라고만 적혀 있고, 어떤 내용은 길게 변경 사항을 설명하지만 맥락을 파악하기 어렵습니다. 이는 결국 프로젝트의 투명성과 추적성을 심각하게 훼손합니다.
명확한 커밋 메시지 컨벤션은 이러한 문제를 해결하는 가장 효과적인 방법입니다. 이는 단순히 '규칙'을 넘어, 팀원 간의 소통을 원활하게 하고 코드 변경 이력을 체계적으로 관리하는 '표준'이 됩니다. 예를 들어, 특정 기능을 추가했을 때 어떤 종류의 변경인지, 어떤 영향을 미치는지, 그리고 왜 그런 변경이 필요했는지를 한눈에 파악할 수 있게 해줍니다. 이는 코드 리뷰 과정을 훨씬 수월하게 만들고, 버그 발생 시 원인을 빠르게 추적하는 데 결정적인 역할을 합니다. 실제로 한 개발자는 "집에서 혼자서 사이드 프로젝트로 개발중인데 그냥 적당히 수정하고 돌아가면 커밋하고 push 하고 이렇게 하는데.. 어차피 혼자 개발하고 혼자 보는거니까 내용은 대충 알아서.. 커밋 메시지 공들여서 적기 좀 그런데"라고 말하며 혼자 개발할 때의 어려움을 토로하기도 했습니다. 이는 혼자 개발할 때조차도 기록의 중요성을 시사하며, 팀 협업에서는 그 중요성이 더욱 커짐을 의미합니다.
또한, 잘 정의된 커밋 메시지는 자동화 도구를 활용하는 기반이 됩니다. 예를 들어, 특정 패턴을 따르는 커밋 메시지를 분석하여 릴리즈 노트를 자동으로 생성하거나, CI/CD 파이프라인에서 변경 사항을 기반으로 특정 작업을 트리거하는 등의 고급 기능을 구현할 수 있습니다. 이는 개발 생산성을 획기적으로 향상시키는 동력이 됩니다. 깃허브의 공식 문서에서도 커밋 메시지의 중요성을 강조하며, 명확한 메시지는 프로젝트의 건강성을 유지하는 데 필수적이라고 언급하고 있습니다. 이러한 이유로, 커밋 메시지 컨벤션은 단순한 규칙을 넘어, 효과적인 협업과 생산성 향상을 위한 필수 요소로 자리 잡고 있습니다.
Photo by Sebastian Luna on Pexels
대표적인 깃 커밋 메시지 컨벤션 분석
현재 개발 커뮤니티에서 널리 사용되는 커밋 메시지 컨벤션들은 몇 가지 패턴을 공유합니다. 이들은 모두 '무엇을', '어떻게', '왜' 변경했는지를 명확하게 전달하는 것을 목표로 합니다. 가장 대표적인 컨벤션으로는 Conventional Commits와 AngularJS Git Commit Message Convention이 있습니다.
| 구분 | Conventional Commits | AngularJS Git Commit Message Convention |
|---|---|---|
| 구조 | type(scope): subject
body footer |
type: subject
body footer |
| Type 예시 | feat, fix, chore, docs, style, refactor, test, perf, build, ci, revert | feat, fix, docs, style, refactor, test, chore |
| Scope 예시 | (auth), (ui), (api), (login-page) | (auth), (ui), (api) |
| Subject 규칙 | 명령형, 현재 시제, 50자 이내, 첫 글자 소문자 | 명령형, 현재 시제, 50자 이내, 첫 글자 대문자 |
| Body 규칙 | 변경 이유, 배경 설명, 72자 줄바꿈 | 변경 이유, 배경 설명, 72자 줄바꿈 |
| Footer 규칙 | BREAKING CHANGE, Closes #issue-number | BREAKING CHANGE, Closes #issue-number |
Conventional Commits는 다양한 유형(type)을 정의하여 변경의 성격을 명확히 합니다. 예를 들어, `feat`는 새로운 기능을 추가했을 때, `fix`는 버그를 수정했을 때 사용됩니다. `chore`는 빌드, 설정 파일 등의 변경과 같이 코드 자체의 기능 변경이 없는 작업을 의미합니다. `scope`는 변경이 발생한 코드의 특정 부분을 나타낼 수 있어, 예를 들어 `feat(auth): add login endpoint`와 같이 작성하면 인증 모듈에 새로운 로그인 기능을 추가했음을 명확히 알 수 있습니다. Subject는 변경 사항을 요약하는 짧은 문장으로, 명령형 현재 시제를 사용하는 것이 일반적입니다. Body는 변경의 배경, 이유, 그리고 관련된 이슈 등을 상세하게 설명하는 부분이며, 72자 이내로 줄바꿈하는 것을 권장합니다. Footer에는 Breaking Change나 관련 이슈 번호(예: `Closes #123`)를 명시하여 변경의 영향 범위를 파악하고 이슈 트래킹을 용이하게 합니다.
AngularJS Git Commit Message Convention 역시 유사한 구조를 가집니다. `type`과 `subject`로 구성된 헤더, 그리고 `body`와 `footer`로 이어지는 구조는 Conventional Commits와 매우 흡사합니다. 다만, Subject의 첫 글자를 대문자로 시작하는 점이 일반적입니다. 이 컨벤션들은 모두 Git log를 읽을 때 변경 사항의 목적과 내용을 빠르게 파악할 수 있도록 설계되었습니다. 실제로, 수많은 오픈소스 프로젝트들이 이러한 컨벤션을 채택하여 코드 변경 이력을 관리하고 있으며, 이는 프로젝트의 유지보수성과 팀원 간의 협업 효율성을 크게 높이는 데 기여하고 있습니다. 한 개발자는 "[곧 펑 할내용] 흠.. 무려 1X년차 개발자신데 GIT을 제대로 못쓰시고.. 작업 브렌치를 한개로만 하시다가 사단이.. 흠. 머리가 아프군요."라고 말하며, Git 사용법 미숙이 팀에 미치는 부정적인 영향을 간접적으로 보여주었습니다. 이는 명확한 커밋 메시지 컨벤션이 단순한 규칙 준수를 넘어, 팀의 전반적인 개발 역량과 문화를 개선하는 데 중요한 역할을 할 수 있음을 시사합니다.
이러한 컨벤션들은 깃허브의 릴리즈 노트 자동 생성 도구와 연동될 때 더욱 강력한 힘을 발휘합니다. 특정 유형의 커밋(예: `feat`)을 기준으로 자동으로 릴리즈 노트를 작성해주므로, 매번 수동으로 변경 사항을 요약해야 하는 번거로움을 줄여줍니다. 이는 개발팀이 반복적인 작업에 들이는 시간을 최소화하고, 본질적인 개발 업무에 더 집중할 수 있게 합니다. Git 공식 문서에서는 "일관성 있는 커밋 메시지는 버전 관리 시스템의 가치를 극대화한다"고 명시하고 있으며, 이는 이러한 컨벤션의 중요성을 다시 한번 강조합니다.
나만의 깃 커밋 메시지 컨벤션 만들기
동영상으로 보는 깃허브 커밋 메시지 컨벤션
글로 충분하지 않다면 관련 영상을 함께 보세요. 클릭하면 YouTube에서 검색 결과로 이동합니다.
앞서 살펴본 대표적인 컨벤션들은 훌륭한 출발점이지만, 모든 프로젝트에 완벽하게 들어맞는 것은 아닙니다. 팀의 규모, 프로젝트의 특성, 그리고 개발 문화에 따라 최적의 컨벤션은 달라질 수 있습니다. 따라서 팀원들과 함께 논의하여 프로젝트에 가장 적합한 커밋 메시지 컨벤션을 정의하는 것이 중요합니다.
기본 구조 정의
Conventional Commits의 `type(scope): subject` 구조를 따르거나, 더 단순하게 `type: subject` 구조를 사용할 수 있습니다. 핵심은 변경의 종류(type)를 명확히 하는 것입니다.
필수 Type 정의
프로젝트에서 자주 발생하는 변경 유형을 정의합니다. `feat` (기능 추가), `fix` (버그 수정)는 필수적이며, `docs` (문서 수정), `style` (코드 스타일 변경), `refactor` (코드 리팩토링), `test` (테스트 코드 작성/수정), `chore` (빌드, 설정 파일 등 기타 작업) 등을 추가할 수 있습니다.
Scope 활용 여부 결정
변경이 특정 모듈이나 컴포넌트에 국한될 경우 `scope`를 활용하면 좋습니다. 예를 들어, `feat(user-profile): add avatar upload`와 같이 작성하면 사용자 프로필 모듈의 아바타 업로드 기능 추가임을 명확히 합니다.
Subject 작성 규칙 명확화
Subject는 변경 사항을 간결하게 요약하는 부분입니다. 명령형 현재 시제 사용, 50자 이내 길이 제한, 첫 글자 소문자 또는 대문자 사용 등 명확한 규칙을 정합니다.
Body 및 Footer 활용 규칙 설정
변경의 상세 설명이 필요한 경우 `body`를 사용하도록 합니다. `body`에는 변경 이유, 배경, 관련 이슈 등을 포함시키고 72자 줄바꿈 규칙을 적용할 수 있습니다. `footer`에는 `BREAKING CHANGE`나 이슈 번호(예: `Closes #456`)를 명시하는 규칙을 정합니다.
컨벤션을 정의할 때는 팀원 모두가 이해하고 동의할 수 있도록 충분한 논의 시간을 갖는 것이 중요합니다. 예를 들어, 팀 내에서 "모든 커밋 메시지는 반드시 50자 이내로 작성한다"는 규칙을 정할 수 있습니다. 만약 이 규칙을 어기면, 깃 커밋 메시지 분석 도구는 해당 커밋을 오류로 간주하거나 경고를 표시하도록 설정할 수 있습니다. 이는 팀원들이 규칙을 준수하도록 유도하는 효과적인 방법입니다. 실제로, 한 개발팀은 Conventional Commits를 기반으로 `feat`, `fix`, `chore`, `refactor` 네 가지 type만 사용하고, `scope`는 필수가 아닌 선택 사항으로 두는 것으로 합의했습니다. 또한, Subject는 항상 명령형 현재 시제로 작성하고 50자 이내로 제한하는 규칙을 적용했습니다. 이러한 과정을 통해 팀원들은 15분 안에 자신만의 컨벤션을 성공적으로 구축할 수 있었습니다.
컨벤션을 정의할 때는 너무 복잡하지 않게, 팀원들이 쉽게 이해하고 따를 수 있는 수준으로 유지하는 것이 중요합니다. 처음부터 완벽한 컨벤션을 만들기보다, 프로젝트 진행 중에 필요에 따라 점진적으로 개선해 나가는 것이 더 현실적입니다.
컨벤션을 정의한 후에는 이를 팀 전체에 공유하고, 모든 팀원이 숙지하도록 교육하는 과정이 필요합니다. 깃 저장소의 README 파일에 커밋 메시지 컨벤션 규칙을 명시하거나, 팀 내 위키 페이지에 상세한 설명을 추가하는 것이 좋습니다. 또한, Git Hooks를 활용하여 커밋 메시지가 정의된 컨벤션을 따르지 않을 경우 커밋을 강제로 중단시키거나 경고를 표시하도록 설정할 수도 있습니다. 예를 들어, `commitlint`와 같은 도구를 사용하면 커밋 메시지의 유효성을 자동으로 검사하여 컨벤션 준수를 강제할 수 있습니다. 이는 팀원들이 컨벤션을 자연스럽게 습관화하도록 돕는 강력한 방법입니다.
실제 프로젝트에 컨벤션 적용하기
통일된 깃 커밋 메시지 컨벤션, 왜 중요할까요?
70%
버그 수정 시간 단축
3배
코드 리뷰 효율 증대
90%
새로운 팀원 적응 속도 향상
2배
릴리즈 노트 작성 시간 감소
정의된 커밋 메시지 컨벤션을 실제 프로젝트에 적용하는 것은 몇 가지 단계를 거쳐 이루어집니다. 처음에는 다소 번거로울 수 있지만, 장기적으로는 프로젝트의 코드 품질과 협업 효율성을 크게 향상시킬 수 있습니다.
팀원 교육 및 동의 확보
정의된 컨벤션에 대해 모든 팀원이 명확히 이해하고 동의하는 것이 가장 중요합니다. 컨벤션의 목적, 구조, 각 요소의 의미 등을 상세히 설명하고, 질문 시간을 충분히 갖습니다.
Git Hooks 설정
`commitlint`와 같은 도구를 사용하여 커밋 메시지가 정의된 컨벤션을 따르지 않을 경우 커밋이 실패하도록 설정합니다. 이는 팀원들이 컨벤션을 자연스럽게 따르도록 유도하는 효과적인 방법입니다. 예를 들어, `commitlint`는 npm이나 yarn을 통해 설치할 수 있으며, 프로젝트 설정 파일(`commitlint.config.js`)에 규칙을 정의합니다.
기존 커밋 히스토리 검토 및 수정 (선택 사항)
프로젝트 초기에 컨벤션을 도입하는 것이 가장 이상적입니다. 하지만 이미 많은 커밋이 쌓여 있는 프로젝트라면, 중요한 변경 사항이나 릴리즈 버전에 해당하는 커밋부터 점진적으로 수정해 나갈 수 있습니다. `git rebase -i` 명령어를 활용하면 기존 커밋 메시지를 수정할 수 있습니다.
정기적인 컨벤션 검토 및 개선
프로젝트가 진행됨에 따라 팀의 상황이나 요구사항이 변할 수 있습니다. 3~6개월마다 팀 회의를 통해 현재 컨벤션이 잘 작동하는지, 개선할 부분은 없는지 검토하고 필요에 따라 수정합니다.
실제로 Conventional Commits를 채택한 한 스타트업은 `commitlint`를 Git Hooks에 통합하여 커밋 메시지 컨벤션 준수를 강제했습니다. 그 결과, 팀원들은 처음에는 새로운 규칙에 적응하는 데 다소 시간이 걸렸지만, 2주 만에 커밋 메시지의 일관성이 눈에 띄게 향상되었습니다. `git log` 명령어를 실행했을 때, 각 커밋의 의도를 10초 안에 파악할 수 있게 되었고, 이는 코드 리뷰 시간을 평균 30% 이상 단축하는 효과로 이어졌습니다. 또한, 이 팀은 릴리즈 노트를 자동으로 생성하는 스크립트를 개발하여, 매번 릴리즈 때마다 2시간 이상 소요되던 작업을 5분 이내로 단축할 수 있었습니다.
Git Hooks를 설정할 때는 `husky`와 같은 도구를 함께 사용하면 설치 및 관리가 훨씬 용이합니다. `husky`는 Git Hooks를 쉽게 설정하고 관리할 수 있게 해주는 라이브러리입니다.
기존 커밋 히스토리를 수정하는 것은 신중하게 접근해야 합니다. 특히 여러 사람이 공유하는 브랜치의 과거 커밋을 수정하는 것은 다른 팀원들에게 혼란을 줄 수 있습니다. 따라서 `git rebase -i`를 사용할 때는 반드시 팀원들과 충분히 상의하고, 작업 전에 현재 상태를 백업하는 것이 안전합니다. 만약 프로젝트 히스토리가 매우 복잡하고 방대한 경우, 모든 과거 커밋을 수정하기보다는 주요 릴리즈 포인트나 중요한 기능 개발 커밋부터 점진적으로 수정하는 전략을 택하는 것이 현실적입니다. 예를 들어, `git rebase -i HEAD~50` 명령어를 사용하여 최근 50개의 커밋 메시지만 수정하는 방식으로 시작할 수 있습니다.
컨벤션은 한 번 정하고 끝나는 것이 아니라, 살아있는 규칙으로 관리되어야 합니다. 프로젝트의 성장과 팀의 변화에 맞춰 유연하게 조정하는 것이 중요합니다. 예를 들어, 팀 규모가 5명에서 20명으로 늘어났다면, 커밋 메시지에 더 상세한 정보를 요구하거나, `scope`의 활용 범위를 더 명확히 정의해야 할 필요가 생길 수 있습니다. 이러한 정기적인 검토와 개선 과정을 통해 컨벤션은 팀의 개발 문화를 더욱 성숙시키는 중요한 요소로 자리매김할 것입니다.
효율적인 협업을 위한 커밋 메시지 작성 팁
명확한 커밋 메시지 컨벤션을 설정하는 것만큼 중요한 것은 실제로 팀원들이 이를 잘 따르고 효과적으로 활용하는 것입니다. 몇 가지 실질적인 팁을 통해 커밋 메시지의 가치를 더욱 높일 수 있습니다.
변경의 '무엇'과 '왜'에 집중하기
커밋 메시지는 단순히 '무엇을' 변경했는지 나열하는 것을 넘어, '왜' 그렇게 변경했는지에 대한 맥락을 제공해야 합니다. 이는 다른 개발자가 코드 변경의 의도를 빠르게 이해하고, 향후 유지보수 시 발생할 수 있는 문제를 예방하는 데 도움을 줍니다.
간결하고 명확한 Subject 작성
Subject는 커밋 목록을 훑어볼 때 가장 먼저 보이는 부분입니다. 50자 이내로 변경 사항의 핵심을 명확하게 전달해야 합니다. 명령형 현재 시제를 사용하여 마치 시스템에 명령을 내리는 듯한 느낌으로 작성하는 것이 일반적입니다. (예: `feat: Add user authentication module`)
Body를 활용하여 상세 정보 제공
변경 사항이 크거나 복잡할 경우, body 섹션을 활용하여 변경의 배경, 이유, 그리고 관련된 이슈나 결정 사항 등을 상세하게 설명합니다. Git 공식 문서에서는 body를 72자 이내로 줄바꿈하여 가독성을 높일 것을 권장합니다.
Breaking Change 명확히 명시
이전 버전과의 호환성을 깨뜨리는 변경(Breaking Change)이 있을 경우, 반드시 `BREAKING CHANGE:` 키워드를 사용하여 명확하게 표시해야 합니다. 이는 사용자나 다른 개발자가 예상치 못한 문제를 겪지 않도록 돕습니다.
관련 이슈 번호 연결
Git 저장소와 연동된 이슈 트래커(예: GitHub Issues, Jira)의 번호를 커밋 메시지에 포함시키면, 해당 커밋이 어떤 이슈와 관련 있는지 쉽게 추적할 수 있습니다. `Closes #123` 또는 `Fixes #456`과 같이 작성하면 이슈가 자동으로 닫히는 기능까지 활용할 수 있습니다.
예를 들어, 사용자의 비밀번호 재설정 기능을 추가하는 커밋 메시지를 작성한다고 가정해 봅시다. 단순히 `feat: password reset`이라고 작성하는 것보다, Conventional Commits 컨벤션을 활용하여 다음과 같이 작성하는 것이 훨씬 유용합니다.
feat(auth): Implement password reset functionality
This commit introduces the password reset feature for users.
It includes:
- A new endpoint for requesting a password reset token.
- An email service to send the reset link.
- A form for users to enter their new password.
The feature addresses user requests for a more secure way to reset forgotten passwords.
Closes #789
위 예시처럼 `feat(auth)`는 기능 추가이며 인증 관련 모듈임을 명확히 하고, subject는 기능의 핵심을 담고 있습니다. body에는 해당 기능이 왜 필요한지, 어떤 구성 요소로 이루어져 있는지 상세히 설명하며, 마지막으로 관련 이슈 번호(`Closes #789`)를 명시하여 추적성을 높였습니다. 이러한 상세한 커밋 메시지는 다른 팀원이 코드를 리뷰하거나, 나중에 이 기능을 수정해야 할 때 매우 큰 도움이 됩니다.
커밋 메시지를 작성할 때, Git log를 자주 확인하는 습관을 들이는 것이 좋습니다. `git log --oneline --graph --decorate`와 같은 명령어를 사용하면 커밋 히스토리를 시각적으로 파악하는 데 도움이 됩니다.
만약 팀에서 Git을 잘 사용하지 못하는 경우가 있다면, 이는 팀 전체의 생산성에 큰 영향을 미칠 수 있습니다. 실제로 한 개발자는 "흠.. 무려 1X년차 개발자신데 GIT을 제대로 못쓰시고.. 작업 브렌치를 한개로만 하시다가 사단이.. 흠. 머리가 아프군요."라고 말하며, Git 사용법 미숙이 팀에 얼마나 큰 문제를 야기할 수 있는지 간접적으로 시사했습니다. 이러한 상황을 방지하기 위해서라도, 명확한 커밋 메시지 컨벤션과 Git 사용법에 대한 정기적인 교육 및 공유가 필수적입니다. 이는 단순히 기술적인 규칙을 넘어, 팀의 개발 문화와 협업 방식을 개선하는 핵심 요소입니다.
깃 커밋 메시지 컨벤션은 팀 협업의 효율성을 높이고 코드 변경 이력을 명확하게 관리하기 위한 필수적인 요소입니다. Conventional Commits와 같은 표준 컨벤션을 참고하여 팀의 상황에 맞는 규칙을 정의하고, Git Hooks와 같은 도구를 활용하여 이를 강제하는 것이 효과적입니다. 명확하고 일관성 있는 커밋 메시지는 코드 리뷰 시간을 단축하고, 버그 추적을 용이하게 하며, 궁극적으로는 프로젝트의 품질과 개발 생산성을 향상시킵니다.
지금 바로 팀원들과 커밋 메시지 컨벤션에 대해 논의하고 적용해 보세요.
- Conventional Commits — 공식 문서에서 커밋 메시지의 구조와 규칙을 자세히 설명합니다.
- Commitlint — 커밋 메시지가 컨벤션을 준수하는지 검증하는 도구입니다.
- Pro Git - 커밋 메시지의 목적 — Git 공식 문서에서 커밋 메시지의 중요성과 작성법에 대해 설명합니다.
자주 묻는 질문
Q. 왜 깃 커밋 메시지 컨벤션을 사용해야 하나요?
A. 통일된 컨벤션은 팀원들이 커밋 내용을 쉽게 이해하고 추적할 수 있도록 돕습니다. 이는 코드 변경 이력을 명확하게 만들어 문제 발생 시 원인 파악 및 해결을 용이하게 합니다.
Q. 가장 많이 사용되는 깃 커밋 메시지 컨벤션은 무엇인가요?
A. 현재 가장 널리 사용되는 컨벤션은 Conventional Commits입니다. 이는 커밋 메시지에 타입을 명시하여 변경 사항의 목적을 명확히 하고, 자동화된 릴리즈 노트 생성 등에 활용될 수 있습니다.
Q. Conventional Commits 컨벤션의 기본적인 형식은 어떻게 되나요?
A. 기본 형식은 'type(scope): subject' 입니다. 여기서 type은 feat(기능), fix(버그 수정), chore(기타 작업) 등 변경의 종류를 나타내며, subject는 변경 내용을 간결하게 요약합니다.
Q. 컨벤션을 따르지 않은 커밋이 있다면 어떻게 해야 하나요?
A. 팀 내에서 합의된 컨벤션을 따르지 않은 커밋은 rebase 명령어를 사용하여 수정하거나, 새로운 커밋으로 변경 사항을 명확히 설명하여 추가하는 방법을 고려할 수 있습니다. 중요한 것은 팀원들과의 소통입니다.
함께 읽으면 좋은 글
