본문 바로가기

프로그래밍/Git

Git 커밋 합치기를 통해 브랜치 관리

Git에서 커밋 합치기를 통해서 브랜치를 관리하는 법을 알아보겠습니다.

설명하기 앞에 우선 '커밋 합치기'라는 기능을 Git에서 n개의 커밋을 1개로 합치는 것으로 정의하겠습니다. 

 

아래 그림처럼 커밋 1~3을 커밋1 하나로 변경된 내용은 모두 포함하면서 관리할 수 있습니다. 

커밋 합치기

 

커밋의 경우는 변경 이력을 기록하는 것이기 때문에 굳이 합치지 않아도 문제가 없을 것 같은데 왜 사용하는 것일까요? 

저같은 경우에는 커밋 합치기를 통해서 Pull Request가 완료된 코드를 develop 또는 master 브랜치에 Merge하기 전에 사용하고 있습니다. 

 

PR을 진행하다보면 수정 사항이 발생할 수 있는데, 이 경우 위 그림의 '합치기 전' 그럼처럼 하나의 기능에 대해서 n개의 커밋이 만들어 질 수 있습니다. 

 

위 사진을 보면 'feature/squash_test' 브랜치에서 기능 개발 이후에 PR을 진행하면서 2번의 추가 커밋이 있었습니다.  

이 2개의 커밋은 PR이 진행되고 있는 중간에는 의미 있는 정보이지만, PR이 완료된 시점에는 크게 의미는 없습니다. 오히려 'squash_test' 라는 1개의 커밋으로 존재하는 것이 이후에 이력을 확인할 때 더 깔끔합니다. 

 

이때 커밋 합치기를 이용해서 아래와 같이 하나의 커밋으로 만들어 줄 수 있습니다. 

 


Git에서는 커밋 합치기를 'Rebase' 명령어를 이용해서 할 수 있습니다. 

 

그림과 비슷한 브랜치와 커밋을 만들었습니다. 

Terminal에서 Git Log를 보는 방법은 아래 명령어를 이용하시면 됩니다. 또는 SourceTree 같은 UI 도구를 사용하면 더 가독성 좋게 볼 수 있습니다. 

git log --oneline --decorate --graph --all

 

작업 Branch를 커밋을 합칠 Branch (='feature/squash_test') 로 이동하고, 아래 명령어를 입력합니다. 

git rebase -i HEAD~~~
  • 여기서 'HEAD' 뒤에 '~'의 갯수가 중요합니다. 마지막 커밋을 포함해서 몇번째 커밋까지 합치기를 할 것인지를 나타냅니다. 
  • 저희는 'PR 수정사항 2', 'PR 수정사항 1', 'squash_test 개발' 3개의 커밋을 합칠 것이기 때문에 '~'를 3개 입력했습니다.

 

명령어를 입력하면 위와 같은 화면이 나옵니다. 

  • 화면 위에 붉은색 박스를 보면 합쳐질 3개의 커밋 정보가 나옵니다. 
  • 화면 아래에는 옵션 값들입니다. 

이 부분이 제일 중요한데, 합칠 커밋을 직접 선택해 줘야 합니다. 다양한 옵션들이 있는데, 여기서는 'squash' 를 선택하겠습니다. 

  • 'squash'는 이전 커밋에다가 해당 커밋을 포함한다는 기능입니다. 

 

최근 2개의 커밋을 'pick'에서 'squash'로 변경했습니다. 이렇게 되면 2개의 커밋 내용이 'squash_test 개발' 커밋에 포함되게 됩니다. 

 

파일을 저장하면 새로운 화면이 또 뜨는데, 여기서는 커밋 메시지를 수정할 수 있습니다. 

 

변경이 필요 없으면 화면을 닫으면 되고, 변경을 해야 한다면 위 그림에서 붉은색 박스의 부분을 수정하고 저장하면 됩니다. 

 

여기까지 하셨으면 커밋 합치기는 끝입니다. 

 

로그를 보면 3개의 커밋이 1개로 합쳐진 것을 확인하실 수 있습니다. 

 

 

마지막으로 'feature/sqaush_test 개발'을 'master' 브랜치로 merge 해주면 완료가 됩니다.