그럼에도 불구하고

👨‍💻

Git commit message는 어떻게 작성해야 할까? 본문

이모저모/개발 이모저모

Git commit message는 어떻게 작성해야 할까?

zenghyun 2023. 6. 30. 01:23

 

오늘은 Git commit message에 대한 이런저런 얘기를 나눠보겠습니다. :)

 

 

 

 

[ commit은 원자적으로 유지하자 ]

원자적? 작다?

네 Git 공식 문서에 따르면 commit은 가능하다면 단일 기능이나, 단일 변화, 수정을 포함해야 하며 각각의 커밋은 한 가지에만 집중하는 게 좋다고 합니다. ⭐️

 

GitHub에 올려진 내 프로젝트 혹은 공부하던 작업물을 올리려고 할 때, 수도 없이 commit을 하고는 하는데요.

 

혹시, commit은 어떤 기준으로 하는 것이 좋은지 생각해보신적 있으신가요?

 

한 가지 예시를 들어보도록 하겠습니다.

 

📌  예시

어떤 쇼핑몰을 만드는 프로젝트를 작성하고 있다고 할 때, 쇼핑몰 안에 있는 물건들의 목록이 있는 파일이 있습니다.

 

그 파일에는 50가지의 물품이 저장되어 있는 상태 입니다.  

 

오늘 우리는 여기서 물품을 100가지로 수정하고, 또한 물품을 장바구니에 담을 수 있는 코드를 작성했습니다.

 

그럼 commit 해야겠죠? 

 

그래서 우리는 commit을 위해 터미널에 git status를 입력하고 현재 상태를 확인합니다. 

$ git status 

-----

수정된 파일  : data.js 

새로 추가된 파일 : addCart.js 

-----

 

여기서 git add. 하실건가요? 

그렇다면 commit message는 어떻게 남기실 건가요?

 

비교적 간단한 상황과 예시를 들어봤는데 이번에는 다른 예시를 들어볼까요?

 

만약 팀에서 코드 작업을 한다면 작업했던 것을 취소해야 할 수 도 있고, 어느 시점에서는 버그를 만들 수도 있습니다. 그래서 만약 한 커밋에 모든 변경사항들을 다 통합했다면, 커밋을 롤백했을 때 엄청나게 많은 작업들을 취소해야 하기 때문에 커밋은 단일목적으로 최소화하는 게 좋습니다.

 

또한, 커밋을 원자적으로, 단일 목적으로 유지했다면 누군가의 작업 중 하나를 실행 취소해도 다른 작업들을 모두 유지할 수 있습니다. 

 

마지막으로 우리가 코드를 검토할 때, 코드를 검토하기 쉽게 해 줍니다. 

그래서 우리가 이해할 수 있는 방법으로 작업들을 그룹화하고, 커밋을 작게 유지하도록 해야 하며, 단지 작게만 분류할 것이 아니라 단일 작업에 집중할 수 있도록 커밋을 유지해야 합니다.

[ commit message는 현재 시제? 과거 시제?? ]

commit message 작성할 때 현재 시제로 작성하세요 아니면 과거 시제로 작성하세요?

이렇게 하는 건 아니죠? 😡

 

저는 commit message 작성할 때 항상 고민을 많이 하는 편인데요,

( 시제를 두고 고민이 아니라 일단 단어부터 생각 안ㄴ.. ㅎㅎ )

 

아무튼 commit message는 작성하는 방식에 따라, 꽤나 직관적으로 우리에게 도움을 줄 수 있습니다.

 

그렇기 때문에 굉장히 중요하지요 :) 

 

자 다시 질문으로 돌아와서 현재 시제로 작성해야 할까요? 아니면 과거 시제로 작성해야 할까요? 

일단, 깃 문서에서는 공식적으로 현재 시제의 명령형 커밋 메시지를 사용할 것을 권장합니다.

 

현재 시제는 예를 들면 어떤 것을 만들다. X를 변경하다. X를 고치다와 같은 동사를 의미합니다. 

 

고쳤다, 변경했다, 업데이트했다 같은 과거시제 대신 말이죠. 

 

저 같은 경우 이런 생각을 하기 전부터 현재 시제로 작성하고는 있었지만, 생각해 보면 의문이 들기는 해요

 

commit은 내가 했던 작업을 올리는 것인데, 그럼 했던 작업이니까 과거 아닐까? 하는 의문이요  🧐

 

그래서 실제로 이 부분에 대해서 아주 많은 논쟁이 있다고 해요.

 

깃 문서에서 공식적으로 추천하는 방식이지만, 무조건 따를 필요는 없으니까요. 

단지 ※권장사항※ 이니까 말이에요. 

Eumir Gaspar라는 분이 작성한 블로그 포스트인데 이분은 과거형 메시지 작성을 선호합니다.

 

심심하면 한번 읽어보세요 :) 

 

https://medium.com/@corrodedlotus/which-tense-should-be-used-on-a-git-commit-message-121cb641134b

 

Which tense should be used on a Git commit message?

Last Friday, Iran and I were pairing when he pointed out that I should change my commit message structure from past to present tense. Ever…

medium.com

 

사람들이 현재 시제를 사용하는 주요 이유 중의 하나는 깃이 어느 시점에서 스스로 메시지를 생성하기 때문이고 

 

우리가 병합하는 (merging) 것에 대해 얘기할 때 깃은 병합(merge), 풀(pull), 리퀘스트(request)와 같이

 

현재시제 메시지를 생성하기 때문에 현재 시제를 사용해야 한다고 주장하기도 합니다. 

 

반대 의견으로는 작업한 것을 커밋하기 때문에 과거 시제가 맞다고 주장하고 있습니다. 

 

작업이 끝났고, 그것을 커밋하는 것이니까요

 

개인적인 저의 생각은 일관성이 유지된다는 가정하에 각자 자유라고 생각합니다.

하지만, 

만약, 회사나 오픈소스 프로젝트에서, 모든 사람들이 현재시제를 사용하고 있고

 

리에게 현재 시제를 사용하라고 한다면, 현재 시제를 사용해야 한다고 생각합니다. 

 

 

🏷️  ps: 스택오버 플로우 사이트에서도 많은 사람들이 싸웠다. ( 12년 전부터 혹은, 그 오래전부터 )

https://stackoverflow.com/questions/3580013/should-i-use-past-or-present-tense-in-git-commit-messages

 

Should I use past or present tense in git commit messages?

I read once that git commit messages should be in the imperative present tense, e.g. "Add tests for x". I always find myself using the past tense, e.g. "Added tests for x" though,

stackoverflow.com

 

들어가서 읽어보면, 최고의 답변은 당연히 현재시제를 사용해야 한다고 말하고 있습니다. 

 

그런데 두 번째로 추천을 많이 받은 답변은 과거시제를 사용해야 한다고 말하고 있습니다. 🔥

 

저의 생각을 요약하자면, 개인적 용도로 사용하는 경우에는 이 패턴을 따를 필요는 없다고 생각합니다.

하지만 회사나 오픈소스 프로젝트에서 일하게 된다면, 커밋 메시지 작성 가이드라인을 따릅니다!! 

Comments