협업을 위한 핵심: Git Branch에 대한 이해

aksen5240·2024년 1월 12일

Git

목록 보기
4/6
post-thumbnail

📚 협업을 위한 핵심: Git Branch에 대한 이해

앞선 글들을 통해 Git을 사용하면 효율적으로 협업을 할 수 있다고 언급한 바 있다. 이 때, 협업의 효율을 높이기 위해서는 대표적으로 Git Branch를 이용하는 방법이 있다.

이번 글을 통해서 Git Branch란 무엇인지, 그리고 이를 통해 어떻게 협업 능률을 높일 수 있는지에 대해 알아보고자 한다.


branch에 대해

📌 branch란

branch란 하나의 '코드 관리 흐름'으로, 한국어로 직역하면 나뭇가지이다.

Git은 나무가 뿌리로 시작해서 끝으로 가서는 여러 개의 가지로 갈라지는 것과 같이, root commit을 뿌리로 시작해서, 가지가 갈라지는 나무모양을 하고 있다.

이때, 이 가지 하나하나를 바로 branch라고 하는 것이다.

📌 branch를 사용해야 하는 이유

우리가 프로젝트를 하다 보면 딱 하나의 코드 관리 흐름으로만 순조롭게 진행할 수 있는 경우는 많지 않다.

또한, 혼자 프로젝트가 아닌 다수와 함께 협업해서 개발을 진행하는 경우, 다양한 코드 관리 흐름을 가지는 것이 더욱 효율적일 때가 많다.

이럴 때 branch를 사용하면 하나의 저장소에서 다양한 소스코드의 버전을 유지하고, 관리할 수 있게 된다.

📌 Git branch 기본 Commend

git branch는 git branch [브랜치명] 커맨드를 통해 생성가능하다.

이 후, branch로 이동을 원하는 경우, git checkout [브랜치명] 커맨드를 통해 이동 가능하다.

📌 Head와 branch의 관계

이미치 출처: https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell

Git status를 보면 HEAD -> branch 로 적힌 모습을 많이 봤을 것이다. 그렇다면 이 둘 사이에 무슨 관계가 있기에 이런 화살표가 있는걸까? 이 화살표는 무엇을 의미하는 걸까?

앞서 branch는 코드를 관리하는 하나의 흐름이라고 하였다. 그리고 HEAD는 어떤 커밋을 가리키는 존재, 즉, '포인터'라고 하였다.

하지만 정확하게 말하면, HEAD는 커밋을 직접적으로 가리키는 것이 아니라, branch를 가리키고, branch를 통해 간접적으로 커밋을 가리키게 된다. 즉 Git의 형태는HEAD -> branch -> Commit의 형태로 Git이 이루어진 것이다.

이러한 관계를 이해하고 merge의 정의에 대해 살펴보면, 더 순조롭게 이해할 수 있을 것이다.

branch merge

📌 merge란

merge란 헤드가 가리키던 커밋에, 다른 브랜치가 가리키던 커밋을 합쳐서 새로운 커밋을 만드는 작업을 의미한다.

이미지 출처: https://www.atlassian.com/git/tutorials/using-branches/git-merge

📌 branch merge하는 법

Git에서는 어떤 branch에서 한 커밋을 그대로 다른 branch에도 반영하는게 가능한데, 바로 'merge'를 통해 가능하다.

이 때, A브랜치의 커밋을, B브랜치에도 반영하기 위해서는 먼저 B브랜치로 이동한 후, git merge [브랜치A 이름] 커멘드를 통해 merge하면 된다.

이 커맨드를 조금만 더 자세히 이해해보면, '현재 위치인 B브랜치에, A브랜치를 합치겠다'라고 해석 가능하다.

📌 merge conflict란

Merge를 하다보면 'Merge conflict in [파일명]' 이라는 경고를 종종 마주할 수 있다. 이는 머지를 하다가 충돌이 발생했다고 Git에서 주는 경고인데, 이러한 Conflict는 왜 생기며, 어떻게 처리할 수 있을까?

먼저, 똑같은 코드를 각 브랜치에서 다르게 수정한 후, 두 브랜치를 merge하려고 하면, Git은 두 개의 다른 수정사항 중 어느 것을 반영해야 할지 결정할 수 없다. 이를 conflict라고 하며, Git은 conflict가 발생하면 사용자에게 위와 같은 경고문을 띄워 알려준다.

📌 conflict 처리 방법

이와 같은 merge conflict가 발생하면, 해결 방법으로 먼저 충돌이 일어난 파일을 연후, merge 결과가 되었으면 하는 모습대로 직접 수정하며 충돌을 해결하는 방법이 있고, git merge --abort라는 커맨드를 통해 일단은 merge 작업을 취소하고 이전 상태로 돌아간 후, 코드를 다시 확인하는 방법이 있다.


Outro

이번 글을 통해 Git Branch와 그것을 사용하는 이유, 기본적인 커맨드 사용 방법, merge의 개념 및 절차, 그리고 merge conflict의 처리 방법에 대해 알아보았다.

Git Branch는 협업 과정에서 필수적인 도구이며, 이를 통해 여러 개발자들이 동시에 다양한 작업을 진행하며 효율적으로 코드를 관리할 수 있다. 이 글을 통해 Git Branch에 대한 이해를 높일 수 있었고, 이를 통해 협업을 어떻게 효율적으로 진행할 수 있을지 깊이있게 생각해볼 수 있었다.

다음 글을 통해서는 merge에 대해 언급했던 부분들에 대해 더욱 심도깊게 알아볼 예정이다.

다음글: Git Merge의 2가지 타입: Fast-forward Merge & 3-way Merge

profile
Tags of Taeryong's Study🌱

0개의 댓글