Git | GitLab

[Git] Squash - 커밋 압축하기

비번변경 2024. 9. 13. 14:10

개요

Git으로 프로젝트를 관리하는 경우, commit 이력을 깔끔하게 관리하는 것은 프로젝트의 이력 파악에 도움을 준다. 

다만 커밋을 수행한 직후에 사소한 오타 등을 수정하기 위해 다시 커밋을 수행하는 상황에 의해 커밋 이력이 난잡해질 수도 있다. 이런 경우 git squash라는 기능을 이용하여 커밋을 압축하는 방식으로 커밋 이력을 정리할 수 있다.

이번 글에서는 git squash를 사용하는 방법을 적어둔다.

 

 

Squash

사전적으로 squash란 '짓누르다'라는 의미로, git에서는 여러 커밋을 하나의 커밋으로 짓눌러 합치는 기능을 제공한다. 불필요하게 작게 나뉜 커밋을 유의미한 변경 사항을 담은 커밋으로 압축할 수 있게 한다.

로컬 레포지터리에서 개발한 내용을 원격 저장소로 올리기 전에 squash를 사용해 필요하지 않는 commit을 정리하면 원격 저장소를 보다 깔끔하게 관리할 수 있다.

 

 

사용법

다음과 같이 두 개의 커밋을 가진 저장소가 있다고 하자.

squash.txt라는 파일을 생성했는데, 그 파일을 test_squash.txt라는 이름으로 변경한 이력이다. 두 개의 커밋을 test_squash.txt라는 파일을 생성했다는 하나의 커밋으로 압축하는 게 보다 깔끔한 이력이 될 것 같다.

 

1. interactive rebase 실행

수정하고자 하는 최근 2개 커밋을 대상으로 Interactive Rebase을 수행한다. 참고로 수정할 커밋이 모두 포함되어 있으면 된다. 

git rebase -i ${수정할 커밋의 직전 커밋}

## 예시
## 최근 2개 커밋
git rebase -i HEAD~2

rebase -i를 수행하면 아래와 같이 세션이 열린다.

 

2. 커밋 squash

커밋 목록 중 squash할 commit을 pick에서 s 또는 squash로 변경하고 저장한다. 아래 예시는 4de82d3을 9d36e15로 합치는 예시이다.

 

3. 커밋 메세지 수정

커밋을 squash하면 커밋 메시지를 수정할 수 있는 세션을 확인할 수 있다.

아래와 같이 커밋 메세지를 수정하고 저장하자.

 

4. Git log 확인

git log 명령어로 확인하면 의도했던 대로 커밋 이력이 정리된 모습을 확인할 수 있다.

 

 

참고 문서

https://devocean.sk.com/blog/techBoardDetail.do?ID=166576&boardType=techBlog

https://meetup.nhncloud.com/posts/39