1570636062583

  • 버전관리에 Rebase방식을 도입하게된 계기, 사용방법, 느낀점
  • 커밋 메세지 한글화 및 통일시킨 결과

위 내용에 대해 정리해보겠습니다.


1. Rebase

Q. 왜 Merge대신 Rebase를 사용했나요?

  • 형상관리에 대해 리서치를 하던 도중 배달의 민족 기술블로그를 통해 rebase에 대해서 알게 되었고, Rebase 방식을 사용할 경우 Git Grphq가 깔끔해지는 것을 보고 도입하기로 결정했습니다.

Q. 그렇다면 Merge와 Rebase의 차이점이 뭐죠?

  • rebase는 말그대로 re + base 베이스를 다시 바꾼다는 의미입니다.
  • Merge는 병합을 하는 것인데, 병합을 하면서 새로운 Merge Commit을 만들기 때문에 그래프에 커밋 개수가 많아지게 되고 보기 어려운 형태의 그래프를 나타내게 됩니다.

아래 예시를 통해 설명하겠습니다.

- Merge

image

위와 같이 master branch와 3개의 commit객체가 있는 상황에서

git checkout -b dev 

위 명령어를 통해서 새로운 dev branch를 만들고 dev branchcheckout을 하고, 커밋 명령어를 통해서 2번 commit을 했다고 가정해보겠습니다. 그러면 아래와 같은 그래프를 가질 것입니다.

image

위 상황에서 dev branchmaster branch로 병합하는 명령어를 실행해봅니다.

git checkout master
git merge dev

1567163201108

commit2를 가르키고 있던 master branch가 merge를 통해서 fast-forward되어서 dev와 같은 branch를 가리킵니다.

이렇게 보면 merge만 사용해도 이상적인 commit graph를 나타낸다고 생각할 수 도 있습니다. 하지만 제가 branch를 만들어서 작업을 하는 도중 팀원이 커밋을 진행했을 경우 아래와 같은 그래프를 나타납니다.

image

위 상황에서 mastercheckout을 해서 merge를 해주게 되면 그래프가 복잡해지는 상황이 나옵니다.

git checkout master
git merge dev

1567163388599

이렇게 하게되면 fast-forward가 아닌 새로운 merge commit을 남기게 됩니다.

- Rebase

그렇다면 rebase를 사용하면 어떻게 되는지 확인해보겠습니다.

1567163406817

글의 처음에서 얘기했듯이 rebase란 base를 다시 지정하다라는 의미입니다. 현재 dev branch의 root는 commit2로서 master가 가르키고 있는 commit보다 뒤에 위치합니다.

여기서 아래와 같은 명령어를 사용해봅니다.

git checkout dev
git rebase master

위 명령어는 dev branch의 base를 master로 사용하겠다는 의미입니다.

1567163420191

그러면 위와 같은 형태의 그래프가 나타나게 됩니다.


Q. Rebase를 하는 방법에 대해 설명해주실 수 있나요?

  1. branch 확인하기

    git branch -a
    
  2. develop branch로 checkout 하기

    git checkout develop
    
  3. 원하는 feature/작업명 branch만들기

    git checkout -b feature/작업명 
    
  4. 작업 후 commit 하기

    git add .
    git commit -m "수정 :  작업명"
    
  5. 현재 브랜치의 base를 origin develop으로 변경하기

    git pull --rebase origin develop
    
  6. 원격 feature branch에 push 하기

    git push origin feature/작업명
    

    github으로 가서 feature/작업명 에서 develop branch로 pullRequest를 보내주고 받아줍니다.

  7. dev branch 에 checkout 하기

    git checkout develop
    
  8. 내가 rebase 해서 갱신된 develop을 local develop에 pull하기

    git pull origin develop
    
  9. 작업했던 feature branch 삭제하기

    git branch -D feature/작업명
    
  10. 삭제했다는 것을 원격에 알리기

    git push origin --delete feature/작업명
    

Q. Rebase방식을 도입해본 결과는 어떻게 됐죠?

  • 적용 전

    1570637436747

  • 적용 후

    1570637307685

  • 위 사진 처럼 rebase를 적용했을 때 그래프가 보기 편했습니다.


 

2. 커밋메세지 한글화, 형식 통일

Q. 왜 영어대신 한글을 사용했나요?

  • 이 프로젝트를 만들기 전 까진 영어로 커밋 메세지를 남겼습니다.
  • 영어로 작성하면 상세하게 작성하지 않게 되었습니다.
  • 제대로 작성되지 않은 커밋메세지는 다시 보게 되지도 않았고, 버전관리에 의미가 사라졌습니다.
  • 팀원과 협의 후 커밋메세지를 상세하게 작성할 수 있도록 한글로 커밋 메세지를 남기기로 했습니다.

Q. 커밋메세지 형식 통일은 어떻게 했나요 ?

  • 아래 표를 기준으로 상황에 맞는 커밋 메세지를 작성했습니다.

Q. 커밋 메세지 한글화를 도입해본 결과는 어떻게 됐죠?

  • 프로젝트 마무리에 바빠질 때에는 한글로 작성해도 자세하게 작성하는게 어려웠습니다.

  • 그래도 확실히 커밋메세지가 한글에 형식까지 통일시키니까 커밋을 찾게 될 경우 찾기 쉬웠습니다.