git merge 이해하기

2023. 1. 5. 13:39git, 리눅스

프로젝트를 진행하게 되면 사람마다 각자 역할을 맡아서 개발을 진행하게 된다. 지금까지 git을 사용하는 대부분의 경우에 혼자서 개발을 진행한 후 git을 활용했지만 사람들과 같이 개발을 진행하기 위해서는 git merge에 대해 이해가 필요하다고 생각한다. 

 

merge란?

분기 되어 있는 브랜치를 병합하는 것이다.

 

merge의 종류

1. merge

2. squash and merge

3. rebase and merge

 

현재 팀프로젝트에서 각자 역할을 맡아 개발을 진행중이라고 가정하자. 내가 개발하고 있는 브랜치명을 my-branch라고 가정했을 때 기존 master에 변화가 없을 경우 다음과 같은 그림일 것이다.

 

my-branch에서 개발중

git branch checkout my-branch

 

만약 내가 my-branch에서 개발을 하고 master에 merge를 하려고 봤는데 다른 팀원이 master에 먼저 merge를 했다면 다음과 같은 그림일 것이다.

 

master에 팀원이 merge 또는 commit을 한 경우

 

위에서 설명한 merge 방법의 과정에 대해서 살펴보자

 

1. merge

 

my-branch 브랜치에서 commit을 a, b, c 총 세번을 했다. a, b, c가 m으로 master에 추가되는 방식으로 진행된다.

m은 두개의 parent를 갖게된다.

 

git checkout master

git merge my-branch

 

2. squash and merge

 

my-branch에서 커밋한 a, b, c를 합쳐서 abc가 master에 추가된다. 여기서 abc는 하나의 parent를 갖게 된다.

주로 feature branch의 commit history를 간단하게 만들어주기 위해 사용된다.

 

git checkout master

git merge --squash my-branch

git commit -m "commit message"

 

3. rebase and merge

 

my-branch에서 한 모든 commit을 master 브랜치에 추가가 된다. rebase and merge를 하게 되면 merge를 한 기록이 없어지므로 하나의 브랜치에서 작업한 거처럼 보인다.

 

git checkout my branch

git rebase master

git checkout master

git merge my-branch

 

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