데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      Git Squash - 여러 개의 Commit들을 합쳐보자

      꼬르따도 24.07.25
      14,129 9 5
      DEVOTEE 요약
      Commit Squash는 여러 개의 commit을 하나로 합쳐 Git 이력을 정리하는 기능입니다. 이로 인해 코드 히스토리가 깔끔해지고 직관성이 높아져, 불필요한 commit들을 정리할 수 있습니다. 사용법으로는 squash할 commit을 선택 후, interactive rebase를 실행하고 commit 메시지를 수정하여 작업을 완료합니다.

      Git Squash가 필요한 이유

      Git repository에 깔끔한 commit 이력을 남기는 것은 중요하다.

      논리적인 작업 단위로 깔끔하게 정리된 commit 이력은 코드 히스토리를 파악하기 쉽게 해주고, 코드 변경 사항을 되돌리고 싶은 경우에도 변경할 시점을 찾기 쉽게 해준다.

      하지만 이미 commit을 했음에도 불구하고 사소한 오타나 버그가 발견되어 commit을 다시 하게 되는 경우가 있다.

      지저분하게 남아 버린 commit 내역들이 있으면 히스토리가 난잡해지고, 코드 이력을 확인할 때의 직관성이 떨어지게 된다.

      이럴 때 유용한 해결책이 squash를 이용하는 것이다.


      Git Squash란?

      Squash는 '짓누르다'라는 의미인데, git에서의 squash는 여러 개의 commit들을 하나의 commit으로 짓눌러서 합치는 기법이다.

      이 기능은 불필요하게 작은 단위로 나뉘어진 commit들을 의미 있는 변경 사항을 담은 commit으로 압축할 수 있게 해준다.

      Local repository에서 작업 중에 자주 commit을 하더라도, remote repository에 push 하거나 pull request를 날리는 등 중요한 작업 전에 squash로 불필요한 commit들을 정리해 주면 깔끔하게 remote repository를 관리할 수 있다.


      Git Sqush 사용법

      그렇다면 이제 예제와 함께 squash의 사용법에 대해 알아보자.

      hello, world! 를 출력하는 bash 스크립트를 다섯 차례로 나누어 commit 한 예시이다.


      Step1. Squash할 Commit 선정

      먼저, git log 명령으로 commit 내역을 확인하고 squash할 commit을 선정한다.

      image.png

      두 번째 "hello" commit과 세 번째 ", " commit을 합치고

      네 번째 "world" commit과 다섯 번째 "!" commit을 합쳐보자.


      Step2. Interactive Rebase 실행

      git rebase -i HEAD~4 명령어로 최근 4개의 commit 을 대상으로 interactive rebase를 시작한다.

      수정하려는 commit들은 전부 포함되어야 하지만, 그 이상을 대상으로 해도 무방하다.

      image.png

      다음과 같이 interactive rebase 세션이 열린다.

      image.png

      참고로 최초의 commit을 포함하고 싶다면 git rebase -i HEAD~5 명령어가 아닌, git rebase -i --root를 사용해야 한다.


      Step3. Squash Commits

      편집기에 보이는 commit 목록에서 squash할 commit을 pick에서 squash 혹은 s로 변경한다.

      이때 squash 혹은 s로 설정한 commit들이 가장 가까운 과거의 commit에 합쳐진다.

      image.png

      이 경우에 ", " commit은 "hello" commit에 합쳐지고, "!" commit은 "world" commit에 합쳐진다.

      만약 ", " commit, "world" commit, "!" commit 을 squash로 설정하였다면 이들 세 commit이 "hello" commit에 합쳐진다.

      squash할 commit들을 표시하였다면 :wq를 입력하여 편집기를 닫는다.


      Step4. Commit Message 수정

      이제 commit message를 수정할 수 있는 창이 나온다.

      image.png

      원하는 내용으로 수정하고 :wq로 저장 후 닫아준다.

      image.png

      ", " commit을 "hello" commit에 합치고, "!" commit을 "world" commit에 합치는 두 가지 squash를 동시에 실행했기 때문에 다음 squash에 관한 message 수정 창도 나오게 된다.

      image.png

      마찬가지로 원하는 내용으로 수정하고 :wq를 입력하여 저장 후 닫아준다.

      image.png


      Step5. Rebase 종료

      Interactive rebase를 종료하면 아래와 같이 수정한 message를 확인할 수 있다.

      이미지 884.png

      git log 명령어로도 확인해보자.

      image.png

      Date 란을 보면 squash한 commit들이 가장 가까운 과거의 commit에 합쳐졌음을 알 수 있다.


      Step6. Push

      Remote repository에 이미 push가 된 commit에 squash를 수행한 경우에, 이를 remote repository에 반영하려면 --force 옵션을 붙여 강제로 push 해주어야 한다.

      image.png


      마치며

      Local repository에서는 작은 작업 단위로 commit을 하더라도 remote repository에 push하기 전에는 squash를 수행하여 깔끔한 이력을 남기는 것이 좋다.

      만약 원격 저장소에 이미 push된 commit을 변경하는 상황이라면, 원격 저장소를 사용하는 개발자들 간에 반드시 미리 소통한 후 squash를 수행하자.

      Squash를 하기 전에는 혹시 모를 실수를 방지하기 위해 branch를 생성하여 backup 해두는 것도 좋다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      꼬르따도 님의 최신 블로그

      더보기
      동영상 기고하기