형상관리 시스템을 사용하는 데 있어, 지금은 거의 대부분의 환경이 git 을 사용하고 있는 것 같습니다. 이렇게 대중화되었음에도, 사용상에 조금 헷갈리는 부분이 있어 정리해 둡니다.

Branch

Branch 란?

git 에서 branch 는 기본 개념입니다. git 은 기본 브랜치(default branch)라고 하는 기본값을 항상 지정하게 되어 있으며, 2023 년 현재 이는 main입니다.

main 브랜치는 프로그램의 배포가 이루어지는 주 브랜치가 되며, 작업 브랜치라고 부르는 것들은 배포 이전에, 각 개발자가 새로운 기능을 개발하거나 기존 내용 중에서 수정하는 내용을 포함하고 있습니다.

하나의 프로젝트에 대해서 여러 명의 개발자가 작업을 할 때에 브랜치를 나누지 않고 작업을 하게 되면 충돌이 발생할 수 있으며, 각자의 배포 내용을 모든 개발자가 매 번 새로 받아서 로컬에도 반영해주어야 하는 번거로움이 발생하게 됩니다.

이러한 문제점을 해결하기 위해서 git 에서는 branch 라는 개념을 사용하고 있으며, 각자 본인의 branch 에서 작업하고 이 브랜치를 main에 머지하는 방식으로 개발을 합니다.

Branch 생성 및 이동

Branch 생성

Branch 생성은 checkout 명령어로 진행합니다. 아래에 명시되어 있듯, checkout은 원래 브랜치를 이동하는 명령어이지만, 없으면 생성해 달라는 -b 옵션을 이용하여 생성 및 이동이 가능합니다.

git checkout -b {branch}

Branch 확인

branch 명령어를 통해 특정 브랜치를 확인하거나, -v 옵션을 이용해서 상세한 내용을 확인할 수 있습니다.

git branch {branch}
git branch -v

Branch 이동

checkout명령어로 특정 브랜치로 이동이 가능합니다.

git checkout {branch}

Merge

Merge 란?

Merge란 여러 브랜치에서 작업된 내용을 합치는 것을 이야기합니다. 단순히 하나의 브랜치에서만 작업하고, 이를 main 브랜치에 merge 하는 경우에는 Pull Request를 이용할 수 있겟지만, 두 곳에서 작업한 내용을 합치게 되거나, 특히 main branch 의 내용을 가져와야 하는 경우에 사용합니다.

예를 들어, main branch 에서 A, B 두 branch를 생성하여 각각 작업을 진행한 경우를 가정해보겠습니다. 각각의 branch 에서 작업을 하던 도중, A branch 가 먼저 main 에 머지된 경우, B branch 에서는 A branch의 변경사항을 가져올 수 없습니다. 따라서 이 경우에는 main 브랜치에 반영된 (정확하게는, B branch 를 생성하고 난 이후 main branch에 추가로 반영된) 사항들을 가져오기 위해서 merge 라는 작업을 진행해야 합니다.

Merge 하기

우선, 작업되어 있는 branch를 최신화하는 것이 좋습니다. 여기서는 main branch 로 이동하여 최신화합니다.

git checkout main
git pull origin main

이제, 머지를 받으려는 브랜치로 이동합니다.

git checkout b

그리고 merge 할 내용이 있는, 받아올 브랜치를 대상으로 하여 아래 명령어를 입력합니다.

git merge main

이렇게 되면 b branch 를 만들 당시 이후에 main branch 에 반영된 사항들을 받아올 수 있습니다.

merge 이후에는 add, commit, push 하여 merge된 내용을 원격에도 반영합니다.

Conflict 발생하는 경우

충돌이 발생하면 코드 상에 아래와 같은 이상한 코드들이 생겨납니다.

&&<<<<<<< HEAD
{현재 branch의 내용}
=======
{충돌나는 branch에서의 내용}
>>>>>>> 충돌나는 branch명 또는 commmit 아이디

이 부분에서 필요한 부분을 남기고 수정하면 됩니다.

IntelliJ 등의 툴을 이용하면 resolve conflicts... 라는 메뉴를 통해서 보고 수정할 수 있습니다.

출처 및 참고자료


Leave a comment