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 해주면 완료가 됩니다.