Branch란?
Branching makes it super easy to work within self-contained contexts, but often we want to incorporate changes from one branch into another.
We can do this using the git merge command
Git Branch를 만들면 독립적인 영역안에서 일을 할 수 있다는 장점이 있다. 그런데 우리가 수행한 작업 중 일부를 다른 브랜치와 통합해야할 때가 있다. 그때 'git merge'라는 명령어를 사용한다.
일반적인 Workflow에서는 Master(main) Branch가 존재한다. 리더가 관리하는 경우가 많으며, 핵심되는 소스코드이다. Master Branch에서 코드를 바로 작성하는 것이 아니라, 'Feature' Branch를 만들고 작업이 적절하다고 판단되면 Master Branch로 Merge하는 방식으로 업무가 진행된다.
Merge와 관련해서 많은 사람들이 햇갈려하는 부분이 있다. 초보자의 경우 아래 2개의 사실을 명심하며 진행해야한다.
- We merge branches, not specific commits
- We always merge to the current HEAD branch
첫째, 커밋이 아니라 브랜치를 merge하는 것이다. 두번째, 현재 HEAD branch에서 merge를 해야한다는 것이다.
Git Merge 예시
'Bugfix' 브랜치를 'Master' 브랜치로 merge 한다고 가정해보자. (To merge the bugfix branch into master) 그러면 아래의 2가지 작업을 수행해야 한다.
- Switch to or checkout the branch you want to merge the changes into (the receiving branch)
- Use the git merge command to merge changes from a specific branch into the current branch.
코드로 상기 작업을 수행하면 아래와 같다.
git switch master
git merge bugfix
'git switch master' 명령어를 입력하면 아래 이미지와 같이 Head가 변경된다.
'git merge bugfix' 명령어를 입력하면, 'bugfix' 브랜치에서 변경된 코드가 'Master' 브랜치로 Merge된다. 다시 말해, 'Bugfix' 브랜치의 코드를 가져와 현재 Head가 위치한 브랜치에 merge되는 것이다.
상기 이미지를 보면 Master가 Bugfix를 가리키는 것을 볼 수 있다. 커밋을 구분하기 위해서 색상을 구분하였지만 실제로는 아래와 같이 보인다.
Master 브랜치가 앞으로 이동한(감긴) 것을 확인할 수 있다. 이것을 'Fast-Forward Merge' 라고 부른다. 이는 Master 브랜치에는 추가 Commit이 없고, 'Bugfix' 브랜치는 커밋을 가지고 있기 때문에 Master 브랜치를 앞으로 이동한 것이다. 그렇다면 Master 브랜치에 커밋이 있는 경우에는 어떻게 될까?
Merge Commit
상기 이미지와 같이 Master Branch에 Commit이 있는 상황에서는 Merger를 할 때 'Fast-Forward Merge'가 되지 않는다. 이 경우 Merge할 때 자동으로 병합되는 경우도 있지만, 코드 충돌이 있는 경우에는 어떤 코드를 사용할지 사용자가 정해야한다. 코드 충돌이 없는 경우 아래 이미지와 같이 Merge Commit이 생성된다.
코드 충돌이 일어나면 아래와 같이 HEAD와 Branch 이름이 나타난다.
"<<<<<<< HEAD ~~~~~ ==========" 사이에서 현재 HEAD의 내용이 표기된다.
"======== ~~~~~~ >>>>>>>>" 사이에는 Merge하려고하는 Branch에서 가져온 것이다.
아래와 같은 절차로 Conflicts를 해결하면 된다.
'Git' 카테고리의 다른 글
[Git/Github] branch 생성 후에 commit 시 잔디가 심어지지 않는 이유 (0) | 2024.01.13 |
---|