Search
Duplicate

여러 커밋을 하나로 합치는 방법 (Squash)

Git Squash는 여러번 커밋한 이력을 하나의 커밋 이력으로 만드는데 사용합니다. 하나의 브랜치(기능)에서 여러 커밋을 하나로 정리하여 깔끔하게 만들 때 사용합니다.

활용 케이스

1. 중간 커밋

깃 특성 상 작업 중인 코드를 커밋을 하지않거나, stash 하지 않으면 브랜치 전환을 하더라도
기존 작업 코드가 보이는 현상이 있습니다.
그래서, 작업이 길어지게 되면 중간 커밋을 하게 되는데, 최종 마스터 브랜치에 푸시하기 전
여러 커밋을 하나로 합치는게, 코드 변경점 확인 용이 및 깔끔한 이력 관리가 가능합니다.

2. PR 피드백 수정 사항 반영

코드 리뷰 후 피드백에 대한 수정을 하고 브랜치에 커밋을 하게되면,
하나의 기능에 여러 변경 이력이 발생되다 보니, 향후 코드 변경점 확인이 어렵고,
마스터 브랜치에 지저분한 커밋 이력이 발생하게 된다. 이를 방지하기 위하여
브랜치 작업 이력을 하나로 합친 후 머지하는게 여러모로 깔끔합니다.

활용 예 (인텔리 제이 기준)

chore(encModuleUp) Brach :: 검증필 암호화 모듈 업그레이드 머징

1차 커밋

2차 커밋

1. GIT > 하나로 합칠 커밋 이력 선택 후 우클릭 > Squash Commits 클릭

2. Squash Commit Message

선택된 여러 커밋 메시지를 하나로 병합 후 OK
두 개의 커밋이 하나로 합쳐진 것을 확인할 수 있다.

3. 프로젝트 > GIT > Push

두 개의 커밋 이력이 모두 반영되었는지 확인 후 Push > Force Push
이미 오리진 브랜치에 Push가 된 두 개의 커밋이 새로 합친 커밋으로 덮어써지기 때문에 경고가 출력된다.
이러한 상황 때문에, 만약 한 브랜치에서 여러 개발자가 개발을 하고 있는 경우, 작업자간 사전 공유를 해야 작업 코드가 꼬이지 않을 수 있다.
예를 들어, A 개발자가 Squash 한 커밋을 브랜치에 Push를 하기 전, B 개발자가 작업 소스를 Stash 한다던가…
기존 존재하였던 두 개의 커밋이 하나로 합쳐진 것을 확인 할 수 있다.
Force Push가 아닌 Push를 하였을 때, 아래와 같은 경고창을 확인 할 수 있다.
특이사항이 없다면, 해당 Cancel 후 Force Push를 하는것을 추천한다.