브랜치(branch) 사용하기

Joon_yyy's velog·2022년 11월 2일
0

Git 정복하기

목록 보기
4/5

4일차 브랜치 사용하기🧐

브랜치란?

💻Codeit에서 교육하는 커리큘럼을 바탕으로 정리하였다.
브랜치란 하나의 코드 관리 흐름을 뜻한다. Git은 나무 뿌리처럼 root commit을 시작으로 가지가 갈라지는 나무 모양이라 생각하면 편한데, 가지 하나하나를 브랜치라 부른다.

예를 들면 하나의 프로그램이라도 유료와 무료버전이 있을 수 있다. 이런 경우 하나의 뿌리에서 유료와 무료의 브랜치를 만들어서 버전을 관리하는 경우가 있을 수 있다.

$ git status

터미널에서 git status 커맨드를 입력하면 main 브랜치 위에 있다라고 표시가 뜬다. 레포지토리를 만들고 커밋을 하면 자동으로 생기는 브랜치를 말한다. 프로젝트 버전관리를 하려면 최소한 하나의 코드관리흐름이 있어야 할 것이다.

$ git branch [만들고자하는 이름]
$ git checkout [가고 싶은 브랜치 이름]

브랜치 다뤄보기

먼저 현재 존재하는 모든 브랜치를 조회하는 방법을 알아보자.

$ git branch

존재한 브랜치들을 확인해보았다면 브랜치를 새로 만들거나, 삭제하는 방법, 새로 만든 브랜치로 바로 이동하는 방법도 알아보자.

$ git branch [만들고자 하는 이름]
$ git branch -d [삭제하고자 하는 이름]
$ git chectout -b [만들고자 하는 이름]

브랜치 merge하기

앞서 나는 main, premium 브랜치 2가지를 작업할 때 사용하였다. 이때 premium branchmain branch로 합칠 때

$ git checkout premium
$ git merge main

하지만 merge를 할 때 conflict가 발생할 수도 있다. premium branchmain branch의 작업이 달랐다고 가정해보자. 파일을 확인해보면

이렇게 가운데 ======을 기준으로 conflict된 것을 확인할 수 있다.
그렇다면 conflict를 해결할 방법은 무엇이 있을까?

  • 파일 수정 후 git add ., git commit을 하는 방법
    -> 자동으로 Merge branch 'main' into premium 메세지가 입력된 것을 볼 수 있다.

  • merge 자체를 취소하는 방법
    -> conflict가 발생한 파일들이 너무 많아서 conflict를 최소화할 수 있는 방식으로 파일들을 다시 수정하고 커밋하거나
    -> 나중에 머지하고 싶을 때

    $ git merge --abort

보통 하나의 프로젝트를 진행할 때 주로 여러 개발자들이 참여하는데, 하나의 프로젝트에는 여러 개발자들이 업무를 분할하여, 각 본인의 브랜치에 자신이 맡은 역할을 작업 한 뒤에 최종적으로 merge하여 프로젝트를 완성한다. 이 과정에서 다른 개발자들간의 코드 내용이 조금씩 틀려 충돌이 자주 발생한다.

remote repository에서 브랜치는 어떻게 보일까?

$ git remote add origin https://github.com/JoonyyyI/Math_Box.git

origin이라는 이름으로 등록하겠다라는 의미로 새로운 리모트 레포지토리를 등록할 때 우리가 origin이라는 이름으로 가리키는 것은 관례화되어 있는 것이다. 원하는 이름을 사용해도 되지만 관례를 따르도록 하자.

$ git push -u origin main

이 커맨드의 뜻은

  • 현재 로컬 레포지토리에 있는 main 브랜치의 내용을 origin이라는 리모트 레포지토리로 보낸다는 뜻이다. 이 때 -u 옵션은 --set-upstream이라는 옵션의 약자
  • --set-upstream 옵션을 주면
    1) 로컬 레포지토리에 있는 main 브랜치가 origin에 있는 main 브랜치를 tracking하는 걸로 설정된다.
    2) tracking이라는 건 로컬 레포지토리의 한 브랜치가 리모트 레포지토리의 한 브랜치와 연결되는데 이렇게 맺어진 연결 상태를 tracking connection이라고 한다.

main branch와 premium branch 둘다 push하기

로컬 레포지토리에서 리모트 레포지토리로 push하고 히스토리 확인시 하나로 합쳐져 있는 것을 확인할 수 있다.

하지만 다시 premium으로 checkout 한 후 git push를 하면 오류가 발생한다.

$ git push --set-upstream origin premium

이 커맨드 입력 후 GitHub를 확인하면 새로운 브랜치가 생긴 것을 확인할 수 있다.

HEAD와 branch와의 관계

  • HEAD: 어떤 커밋 하나를 가리킴
  • branch: 하나의 코드 관리 흐름

branch는 프로젝트에서 코드를 관리하는 하나의 흐름인데, 사실 branch도 어떤 커밋을 가리키는 존재로 포인터라 부를 것이다. 새로운 커밋을 할 때마다 main 브랜치는 새로운 커밋을 가리킨다.
HEAD도 어던 커밋을 가리키는 존재로 포인터라 부르는데, 명확히 하자면 HEAD는 어떤 branch를 가리키는 것이다. 그 branchworking directory가 된다는 의미기도 하다.

git reset vs git checkout

git resetgit checkout
HEAD가 가리키던 브랜치가 다른 커밋을 가리키도록 한다HEAD 자체가 다른 커밋이나 브랜치를 가리키도록 한다
HEAD도 결국 간접적으로 다른 커밋을 가리키게되는 효과가 생긴다브랜치를 통하지 않고, 커밋을 직접적으로 가리키는 HEAD를 Detached HEAD라고 한다.

오늘의 정리💪

오늘 배운 브랜치의 개념은 조금 어렵다. 그래도 한번 정리했다는 데 의미를 갖고 실무경험을 통해 branch, HEAD 차이점을 이해해보고, merge를 할 때 오류도 경험해보면서 이해해보도록 노력하자!

0개의 댓글