개요
Git을 사용해서 협업하다보면 개인의 로컬 브랜치에서 작업을 하고, 최종 브랜치에서 Merge로 병합해서 관리한다.
그런데 최근 병합한 커밋 내역 관리가 어렵다고 생각하던 중, Squash / Rebase 라는 기능을 알게 되어 내용을 정리하고 공유하고자 한다.
이 게시글에서 사용하는 모든 그림은 https://im-developer.tistory.com/182 여기에서 너무 잘 정리해놓으셨길래 참고했다.
예시로 사용할 브랜치명은 개인 브랜치는 my-branch, 최종 브랜치명은 master 이다.
Merge
명령어 : git merge my-branch
Merge 는 주로 사용하는 브랜치 병합 기법으로, 병합하려는 브랜치의 변경내역을 현재 브랜치의 커밋내역에 모두 합치는 방법이다.
아래 그림과 같이 master 브랜치에서 my-branch를 merge 하면
my-branch의 변경사항 a,b,c 커밋 내역과 마지막 c 커밋을 참조하는 커밋노드(m)가 master 브랜치에 생성된다.
이 방법은 병합한 브랜치의 최종 커밋 위치도 관리를 하므로 추적에 용이하지만,
각 브랜치의 커밋 이 많이 쌓였을 때 병합을 하면 최종 브랜치에서 관리가 어려워질 수 있다.
Merge & Squash
명령어 : git merge --squash my-branch
Squash는 위의 명령어와 같이 Merge 에 옵션으로 사용된다.
이 Squash는 my-branch의 a,b,c 커밋내역을 모두 합친 하나의 abc 커밋 노드를 생성한다 (merge 방법과 다르게 my-branch의 마지막 커밋을 참조하지 않는다)
Squash를 사용하면 특정 브랜치에서 커밋내역이 지저분하거나 너무 많은 경우 깔끔하게 한개만 관리할수 있다는 장점이 있다.
Rebase
명령어 : git rebase my-branch
Rebase를 통해 my-branch를 병합하게 되면 a,b,c 커밋 노드가 master 브랜치에도 생성된다.
즉 Rebase를 사용해서 병합하게 되면 마치 한개의 브랜치에서 커밋을 찍은것처럼 보여지게 된다.
그래서 각각 브랜치를 유지하지 않고 병합한 브랜치를 없애서 단일 브랜치로만 관리하고자 하는 목적이라면 좋은 방법인것 같다.
내용 정리
- Merge : 병합한 브랜치의 커밋내역이 Master 브랜치에 커밋트리에 모두 나오게된다.
- Squash : 병합한 브랜치의 커밋내역이 Master 브랜치에 새로운 커밋노드로 1개로 합쳐져서 생성되게 된다.
- Rebase : 병합한 브랜치의 커밋내역이 Master 브랜치에 모두 조회되는데 Master 브랜치에서 커밋 찍은 것 처럼 1Dept로 조회된다.
'Study > Git' 카테고리의 다른 글
[Git] 원격 Git 프로젝트 로컬 Eclipse 연동 방법 (0) | 2022.11.04 |
---|---|
[Git] 자주 사용하는 Git 명령어 모음 (0) | 2022.11.04 |