티스토리 뷰

Git

[git] Squash commits

cs09g 2019. 1. 23. 14:35
반응형

이슈에 대한 해결이나 한 가지 기능에 대한 커밋이 여러 개로 분산되어 있으면, 히스토리를 확인하는 측면과 버전 관리 측면에서 효율적이지 않다. 따라서 동일 이슈나 동일 기능성에 대해서는 해당하는 내용에 대한 커밋을 하나로 합치는 작업을 하는 것이 좋은데, 이를 squash 라고 한다.


Squash 는 Git 의 일반적인 사용과는 약간 다르다. 한마디로 어렵다. 경험으로 터득하지 않으면 할 수 없는 자전거 타기와 같다.


방법:

1. squash 할 커밋이 놓여있는 branch 로 이동한다. 만약 로컬의 master 브런치에서 작업중이라면, 원격 master 와 비교해야 하므로 브런치명은 origin/master 가 된다.

 # git checkout 브런치명

2. rebase

 # git rebase -i 브런치명

 위 명령을 사용하면, 커밋 히스토리가 나타난다.

3. 히스토리 squash 처리

 히스토리에서 병합할 commit 을 찾아 pick => squash 로 변경하면, 변경된 커밋과 그 위에 위치한 커밋이 병합된다. 커밋이 중구난방이라면 적절하게 순서를 변경한 후 squash 처리를 해도 된다.

 저장을 하고 종료하면 커밋 메시지 작성 화면이 나타난다.

 squash 대상 커밋의 메시지가 모두 나타나므로, 내용을 적절히 수정한 후 저장하고 종료한다.

4. 로그 확인

  # git log -n 확인할 커밋 수

  위 명령을 사용하면, 커밋 로그가 나타나는데, 분산되어 있던 커밋이 하나로 합쳐진 것을 확인할 수 있다.

5. 변경사항 푸시

  # git push -f origin 브런치명


정상적으로 squash 내용이 적용된다.



반응형
댓글