svn 을 사용할 경우 내 변경이 다른 이의 작업에 영향을 줄까봐 commit 을 하지 않는 나쁜 습관을 갖게 되는 경우가 많다.

물론 branch 에서 작업하면 되지만 svn 은 브랜치와 머지가 쉽지 않으므로 대개 trunk 에서 작업하게 되며 이로 인해 커밋을 자주 하지않는 악순환에 빠지게 된다.

git 은 DVCS 이므로 push 를 하지 않으면 다른 이에게 영향을 주지 않으므로 커밋은 최대한 자주 해주는게 좋지만 로컬 커밋시 자세하게 커밋 메시지를 입력할 필요는 없다..

먼저 feature branch 에서 수시로 커밋하면서 작업을 완료한 후에 여러 개의 커밋을 묶어서 하나의 커밋으로 만들고 커밋 메시지를 다시 입력하고 이후에 push 하면 된다.

 

SourceTree 에서 사용

 

  1. develop(81d6a38) 에서 분기한 "squash_commit_test" 라는 feature 브랜치에서 4개의 커밋을 수행했다. 이 4 개의 커밋을 합쳐보자.
     
  2. 묶을 커밋의 부모 커밋(81d6a38)을 클릭한 후에 "Rebase children of interactively" 선택
  3. rebase 창에서 전체 커밋들의 목록이 표시됨
  4. 위에 있는 가장 최근의 커밋을 선택하고 하단의 "Squash with previous" 클릭하면 commit 3, 4가 하나로 합쳐진다.
     
  5. 4와 2를 합치기 위해 맨 위 커밋을 선택하고 다시 "Squash with previous" 클릭
  6. 2,3,4 가 하나로 합쳐졌다. 다시 맨 위를 선택하고 "Squash with previous" 클릭하여 1과 합친다.
     
  7. 4개의 커밋이 하나의 커밋으로 합쳐졌다.  커밋 메시지를 변경하려면 하단의 "Edit Message" 클릭
     
  8. squash commit 시 기본 커밋 메시지는 다음과 같이 합쳐진 커밋의 해쉬와 커밋 메시지가 표시된다. 알아보기 쉽게 정리된 커밋 메시지를 다시 입력한다.

    SourceTree의 버그인지 squash commit 메시지에 한글을 입력하면 한글이 깨지는 문제가 있다.


     

  9. 커밋 메시지 입력이 끝났으면 하단의 Ok 를 클릭하면 squash commit 이 완료된다. 
  10. 작업이 완료되면 다음과 같이 합쳐진 것을 확인할 수 있다.

 

Ref