본문으로 바로가기

1. Commit을 왜 합치나요? (git squash)

1. Commit이 무분별하게 쓸데없이 많은 경우

너무 무분별하게 commit을 생성한 경우에 병합하기 위해 사용합니다.

 

2. 현업에서의 요청

일반적으로 현업에서 개발을 할 경우

Local Repository에 feature 브랜치를 생성해서 작업 후 운영, 개발 브랜치에 merge를 하는 방식으로 개발하게 됩니다.

결국엔 feature 브랜치에서 개발을 하면서 여러 개의 commit이 생성되게 되면서 그대로 운영, 개발 브랜치에 merge 할 경우

운영, 개발 브랜치에도 feature 브랜치의 commit 수 만큼 commit이 증가하기 때문에 하나로 합쳐서

Merge Request, Pull Request 하라는 요청을 많이 받게 됩니다.

 

2. 명령어  및 실습

$ git rebase -i (대상 바로 이전 commit hash)

 

[실습 전 준비]

1. 프로젝트 생성(디렉토리 생성)

2. git init

3. 파일 생성 (one.txt)

4. git add . ; git commit -m "main commit"

5. git switch -c feature/1

6. 생성된 파일 수정 및 커밋 (여러 번)

git commit -am "1"

git commit -am "2"

git commit -am "3"

IntelliJ Git

 

[예시(실습)]

feature/1 브랜치의 1,2,3 commit을 하나의 커밋으로 합치세요.

 

Git commit 로그 확인

$ git log --pretty=oneline
751765be1b8ea2648d597e8999702275aa3cd5ae (HEAD -> feature/1) 3
1b3d532ee45e1fa93c5d7ea7395e5761b1aa476f 2
193e9dda8fc71a6ba4205eee113b66c602382fcc 1
d4d00dbe7be4ccf50ef68e4751ec119b7468c807 (main) main commit

 

git rebase -i (대상 바로 이전 commit hash)

 

1, 2, 3 commit을 병합할 것이므로 이전 커밋인 main commit hash 값을 이용합니다.

$ git rebase -i d4d00dbe7be4ccf50ef68e4751ec119b7468c807

 

해당 명령어를 실행하게 되면 다음과 같이 출력이 되게 됩니다. (vi 형태)

git rebase -i

 

rebase command

하단의 Commands를 보고 어떻게 작업할지 작성하면 됩니다.

해당 예시에서는 squash와 commit만 적용해봅니다. (다양하게 수정 가능합니다.)

 

vi 사용하는 법과 동일하게 다음과 같이 작성 후 :wq로 저장 후 나가기 해줍니다.

pick 193e9dd 1
s 1b3d532 2
s 751765b 3

 

[설명]

2번과 3번은 이전 커밋에 합쳐질 것이므로 앞에 s로 수정합니다.

1번의 경우 남아서 합쳐져야 되기 때문에 pick으로 둡니다.

git rebase -i

 

:wq로 저장하게 되면 commit 메시지를 어떻게 작성할지 나오게 되는데 작성 후 :wq로 저장해주면 3개의 commit이 병합이 됩니다.

git rebase -i

 

commit 확인

$ git log --pretty=oneline

1ec700c065d1cea5534d66776b7131e02c8c7aed (HEAD -> feature/1) commit squash(1,2,3)
d4d00dbe7be4ccf50ef68e4751ec119b7468c807 (main) main commit