oris9

[Git] 좋은 commit 작성과 commit관련 명령어들 본문

Git

[Git] 좋은 commit 작성과 commit관련 명령어들

oris9 2024. 3. 20. 15:17

타입 설명
build   빌드 시스템, 외부 종속성에 영향을 주는 작업
ci   ci 구성 파일, 스크립트 변경
docs   md와 같은 documentation의 변경
feat   새로운 기능 추가
fix   버그 수정
perf   성능 개선 작업
refactor   리팩토링 작업(코드 동작은 유지하되, 코드의 가독성과 유지보수성을 높이기 위해 내부구조 변경)
test   테스트 코드 추가, 기존 테스트 수정
revert   커밋 취소

 

 

커밋 제목 작성 

아래 중 적합한 태그를 찾아 앞에 붙인다음 상세 내용을 작성한다

`태그: 요약 메세지`

  • feat: 새로운 기능 추가
  • fix: 버그 수정
  • docs: 문서 수정
  • style: 코드 스타일 변경 (코드 포매팅, 세미콜론 누락 등)
  • design: 사용자 UI 디자인 변경 (CSS 등)
  • test: 테스트 코드, 리팩토링 (Test Code)
  • refactor: 리팩토링 (Production Code)
  • build: 빌드 파일 수정
  • ci: CI 설정 파일 수정
  • perf: 성능 개선
  • chore: 자잘한 수정이나 빌드 업데이트
  • rename: 파일 혹은 폴더명을 수정만 한 경우
  • remove: 파일을 삭제만 한 경우
  • fix typo : 오타수정시, 길게 작성하지않는다

 

① 태그의 첫글자 대소문자는 통일해서 작성한다

② 요약 메세지는 명령형으로 작성한다

③ 50자 이내로 작성한다

 

커밋 본문 작성 

① 한 줄 당 72자 이내로 최대한 상세하게 작성한다

어떻게 변경했는지 보다 무엇을 왜 변경했는지를 설명한다

 

 

 

꼬릿말 작성 

반드시 작성할 필요는 없고 issue tracker ID를 명시하고 싶은 경우에 작성한다

  • << 유형 >>: #<< 이슈 번호 >> 형식으로 작성합니다.
  • 여러 개의 이슈 번호를 적을 때는 쉼표로 구분합니다.
  • 이슈 트래커 유형은 다음 중 하나를 사용합니다.
    • Fixes: 이슈 수정중 (아직 해결되지 않은 경우)
    • Resolves: 이슈를 해결했을 때 사용
    • Ref: 참고할 이슈가 있을 때 사용
    • Related to: 해당 커밋에 관련된 이슈번호 (아직 해결되지 않은 경우)

 

 

Feat: 사용자 인증 기능 구현

- OAuth 연동
- 회원가입과 로그인 로직 구현
- 로그인, 회원가입 폼 컴포넌트 구현

Fixes: #13
Resolves: #11, #12
Ref: #10
Related to: # 14

 

 

커밋메세지 수정하기

1. 커밋이 로컬 리포지토리에만 있고 GitHub에 푸시되지 않은 경우 

`git commit --amend `명령을 사용하여 커밋 메시지를 수정할 수 있다.

로그에서 여태 자신이 한 커밋을 쭉 확인 후 어떤 커밋을 수정할 것인지 확인한다.

만일 위에서부터 세 번째 커밋을 수정해야 한다면

git rebase -i HEAD~3  // 현재 작업중인 브랜치의 가장 최근 commit 3개를 보여줌

 

그럼 다음과 같은 창이 뜹니다.

 

pick e499d89 Delete CNAME
pick 0c39034 Better README
pick f7fde4a Change the commit message but push the same commit.

# Rebase 9fdb3bd..f7fde4a onto 9fdb3bd
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

 

이젠 수정하고 싶은 커밋 옆의 pick 이라는 문구를 reword 로 바꿔 주면 된다.

두 번째 커밋과 세 번째 커밋을 수정하는 경우, 아래와 같이 바꿔주고

pick e499d89 Delete CNAME
reword 0c39034 Better README
reword f7fde4a Change the commit message but push the same commit.

esc -> :wq 를 통해 커밋 리스트를 저장을 해주고 나면, 두 개의 커밋을 각각 수정할 수 있는 창이 순서대로 띄워진다.

원하는대로 커밋을 수정하시고, :wq 를 통해 저장한다.

수정이 잘 되었는지는 git log 를 통해 확인이 가능하다.

 

2. 이미 커밋을 push 해 remote 에 올린 상황일 때

커밋이 이미 remote 에 적용된 상황이라면, force 를 통해 수정된 커밋을 강제로 push 해주어야 한다.

github 공식 문서에 따르면 force pushing 을 최대한 사용하지 않아야 한다고 하고,
왜냐하면 push 된 커밋의 로그를 갖고 있던 다른 팀원들이 로그를 수동으로 수정해줘야 하기 때문이라고 한다...

로컬에서 commit 을 할 때도 중요하지만 remote 에 push 하기 전에는 정말 두 번 세 번 다시 확인합시다!!!

We strongly discourage force pushing, since this changes the history of your repository. If you force push, people who have already cloned your repository will have to manually fix their local history. For more information, see "Recovering from upstream rebase" in the Git manual.

방법 자체는 간단합니다. local 에서 commit 메세지를 수정한 후, 아래 커맨드를 실행하면 됩니다.

git push --force 브랜치이름

 

 

Commit 취소 방법

// [방법 1] commit을 취소 후, 파일은 staged 상태로 보존
$ git reset --soft HEAD^
// [방법 2] commit을 취소 후, 파일들은 unstaged 상태로 보존
$ git reset --mixed HEAD^ // 기본 옵션
$ git reset HEAD^ // 위와 동일
$ git reset HEAD~2 // 마지막 2개의 commit을 취소
// [방법 3] commit을 취소 후, 파일들은 unstaged 상태로 삭제
$ git reset --hard HEAD^

 

 

 

 

출처
Github Docs: changing a commit message

https://overcome-the-limits.tistory.com/entry/%ED%98%91%EC%97%85-%ED%98%91%EC%97%85%EC%9D%84-%EC%9C%84%ED%95%9C-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-git-%EC%BB%A4%EB%B0%8B%EC%BB%A8%EB%B2%A4%EC%85%98-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

https://blog.ull.im/engineering/2019/03/10/logs-on-git.html

https://github.com/RomuloOliveira/commit-messages-guide/blob/master/README_ko-KR.md