Skip to content

Instantly share code, notes, and snippets.

@taekwon-dev
Last active April 22, 2022 15:48
Show Gist options
  • Save taekwon-dev/1458d1b2f8478a71e4ba24f1ddd2f1d4 to your computer and use it in GitHub Desktop.
Save taekwon-dev/1458d1b2f8478a71e4ba24f1ddd2f1d4 to your computer and use it in GitHub Desktop.

Git — Squash Commits into one

각 개발 팀 별로 Git Flow 운영하는 방식이 다를 수 있지만, 대게 1 commit per 1 feature 를 준수하는 경우가 많은데 이 때 하나의 Feature Branch 에서 두 개 이상의 커밋을 하나로 병합하기 위해서 Squash 를 사용할 수 있다.

image [그림 1]

[그림 1]에서 두 개의 커밋을 병합하기 위해git rebase -i HEAD~N (N = 병합하고 싶은 커밋 수)를 터미널에서 입력하는데, 이 경우 두 개의 커밋을 하나로 병합하는 상황이므로 git rebase -i HEAD~2 를 입력한다.

image [그림 2]

위 명령어를 입력하면 [그림 2] 처럼 에디터가 오픈된다. Squash는 기본적으로 이전 커밋에 병합되는 구조이므로 commit 2 를 commit 1 으로 병합 하는 것으로 이해하면 된다.

image [그림 3]

따라서 [그림 3] 처럼 (에디터 입력 상태에서) pick → squash or s 로 변경한 뒤 wq! 명령어를 통해서 저장하면 된다. 여기서 끝이 아니고, 커밋 이력을 변경 했으므로 커밋 메시지를 수정할 수 있도록 에디터가 한 번 떠 뜨는데, 위에서 언급 했듯이 이전 커밋에 병합되는 구조이므로 이전 커밋에 해당하는 메시지가 병합된 커밋에 대한 메시지가 된다.

image [그림 4] — [그림3]에서 저장 한 뒤 바로 열리는 커밋 메시지 지정을 위한 에디터

[그림 4] 에디터에서 커밋 메시지 수정 한 뒤 저장하면 커밋 병합이 완료된다.

image [그림 5] 사실 매우 간단한 처리지만 가끔씩 Squash 가 필요한 경우에 어떤 것을 Squash 로 지정해야 하는 지 헷갈리는데, 기억하면 좋은 것은 Squash 으로 지정한 커밋은 이전 커밋으로 병합된다는 점이다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment