Git의 MERGE, SQUASH, REBASE 정리

이종현·2023년 8월 25일
0

Git

목록 보기
4/4
post-thumbnail

Git을 사용해서 협업하다보면, 각 브랜치에서 작업을 하고 최종 브랜치로 병합해서 관리하는데, 각 브랜치에서의 작업이 길어지고 커밋이 많이 쌓이게 되면 히스토리 추적이 어려워지곤 한다.

나또한 커밋관리가 너무 힘들어져서 찾아보던 중 SQUASH와 REBASE기능을 발견해서 내용을 정리하고자 한다.

이 게시글에서 사용하는 모든 그림은 https://im-developer.tistory.com/182 여기에서 너무 잘 정리해놓으셨길래 참고하였다.

예시로 사용할 브랜치명은 아래와 같이 최종브랜치명은 master, 병합하고자 하는 브랜치명은 my-branch이다.


먼저 기본 병합 방법 MERGE에 대해 알아보자

Merge

  • 명령어
git merge my-branch

Merge명령어를 사용하면 병합한 브랜치의 커밋들을 참조하는 커밋노드(m)가 생성되고, master 브랜치의 해당 커밋과 병합한 브랜치의 마지막 커밋 노드 2곳을 참조한다.

이렇게 되면 병합한 브랜치의 최종 커밋 위치도 관리를 하므로 추적은 용이하지만, master 커밋트리에서 매우 많은 커밋내역들이 나와서 복잡해질수 있다.


Squash

  • 명령어
git merge —squash my-branch

Squash 옵션을 사용해서 병합하게 되면, MASTER 브랜치에 병합한 브랜치의 커밋 내역들을 합쳐서 하나의 새로운 커밋을 생성한다.

이때 기본 MERGE와 다르게 병합한 브랜치의 마지막 커밋 위치를 참조하지 않는다.
Squash를 사용하면 특정 브랜치에서 커밋내역이 지저분하거나 너무 많은 경우 깔끔하게 한개만 관리할수 있다는 장점이 있다.


Rebase

  • 명령어
git rebase my-branch

Rebase를 사용하면 병합한 브랜치의 커밋내역들이 각각 MATER 브랜치에 생기게 된다.

즉, 병합한 브랜치에 a,b,c 커밋내역이 있었다면 MASTER 브랜치에도 a,b,c 커밋내역이 생기게 된다.

기본 Merge를 사용해서 병합하면 MASTER 브랜치에서 커밋 기록을 볼수있지만, Rebase를 사용해서 병합하게 되면 마치 한개의 브랜치에서 커밋을 찍은것처럼 보여지게 된다.

그래서 각각 브랜치를 유지하지 않고 병합한 브랜치를 없애서 단일 브랜치로만 관리하고자 하는 목적이라면 좋은 방법인것 같다.


✅ 내용 정리

  • Merge : 병합한 브랜치의 커밋내역이 Master 브랜치에 커밋트리에 모두 나오게된다.
  • Squash : 병합한 브랜치의 커밋내역이 Master 브랜치에 새로운 커밋노드로 1개로 합쳐져서 생성되게 된다.
  • Rebase : 병합한 브랜치의 커밋내역이 Master 브랜치에 모두 조회되는데 Master 브랜치에서 커밋 찍은 것 처럼 1Dept로 조회된다.

참조

https://im-developer.tistory.com/182

profile
백엔드 개발자의 소소한 개발 기록.

0개의 댓글