[깃(Git)] 2. 브랜치(Branch)의 개념 및 흐름

브랜치(Branch)란?

image

  • 브랜치는 사용자가 독립적으로 작업을 진행할 수 있도록 돕는 작업 흐름이다.
  • 하나의 개발 프로젝트에 참여하는 개발자 A, B가 동시에 작업해야 하는 경우,
    • 위 예시처럼 개발자 A가 먼저 작업을 완료한 뒤, 개발자 B가 이어서 순차적으로 작업할 만큼 현실에서는 넉넉한 시간을 주지 않는다.
    • 개발 기간 동안 개발자 A와 B가 담당할 기능을 미리 정하고 동시에 작업하는 경우가 대부분이다.
  • 깃에서 브랜치는 여러 작업을 각각 독립된 공간에서 진행할 수 있도록 하는 기능이다.
  • 하나의 브랜치는 독립된 워크스페이스, 인덱스, 로컬 레포지토리, 리모트 레포지토리 공간을 가진다.
  • 보통 main이라는 기본 브랜치 위에서 작업했으며, 브랜치 위에 새로운 브랜치를 생성해 독립된 작업 공간을 만들 수 있다.
  • 이처럼 브랜치를 이용하면 하나의 프로젝트에서 여러 사람이 동시에 본인의 작업을 진행할 수 있다.

브랜치를 이용한 작업 흐름

  1. 각 개발자는 메인 브랜치에서 각자 자신이 작업할 새로운 브랜치를 만든다.
  2. 각 개발자는 본인이 만든 브랜치 위에서 작업한다.
  3. 깃 호스팅 서버를 쓰지 않는 경우,
    • 작업 완료 후 작업한 브랜치를 메인 브랜치에 머지한다.
    • 로컬 레포지토리의 메인 브랜치가 업데이트 되었으므로, 리모트 레포지토리에도 푸시하여 최신 내역을 공유한다.
  4. 깃 호스팅 서버를 쓰는 경우,
    • 작업 완료 후 리모트 레포지토리의 자신이 작업한 브랜치를 푸시한다.
    • 리모트 레포지토리에서 메인 브랜치로 풀 리퀘스트(PR, Pull Request)를 진행한다.
    • 협업하는 다른 개발자에게 리뷰를 받는다.
    • 리뷰 및 합의 후 메인 브랜치에 머지한다.

코드 사례

  • 쇼핑몰 웹 서버 개발 프로젝트에 개발자 A와 B가 참여했다.
  • 회의를 통해 개발자 A는 유저 관련 기능을, 개발자 B는 결제 관련 기능을 개발하기로 했다.
  • 깃으로 코드와 버전을 관리하고, 리모트 레포지토리로 깃허브를 사용하여 각자 작업 완료 후 PR을 날려 리뷰하기로 정했다.

  • 필자를 개발자 A라고 가정한다.
1
2
3
4
5
6
7
8
# 사용할 브런치 생성
$ git switch -c users

'''
위 명령어는 git switch -c users main과 동일하다.
git switch -c {새로운 브랜치 이름} {기준 브랜치}이 명령어 포맷이다.
뒤에 {기준 브랜치}는 생략 가능하며, 생략할 시 현재 브랜치를 기준으로 새로운 브랜치가 생성된다.
'''
  • 위 명령어를 통해 기존의 메인 브랜치인 main에서 users로 바꿨다.
  • 이제 users 브랜치는 main 브랜치와는 독립적인 4개의 공간을 갖게 된다.
  • 다음 users 브랜치 위에서 일련의 작업을 완료했고, 이 과정 중 git addgit commit을 반복했을 것이다.
  • 다음 과정은 PR을 통해 동료들에게 코드 리뷰를 받을 지 말 지에 따라 달라진다.

바로 변경사항을 업로드하는 경우

  • users 브랜치에서 작업한 내역을 메인 브랜치에 합친다.
1
2
3
4
5
6
7
8
# 합치기 위해 main 브랜치로 이동
$ git switch main

# users 브랜치를 현재 브랜치(main)에 머지
$ git merge users

# 업데이트된 main 브랜치를 리모트 레포지토리에도 푸시로 반영
$ git push origin main

PR 받은 후 업로드하는 경우

  • 작업 내역을 리모트 레포지토리인 깃허브에 보낸다.
  • 이 때 자신이 만든 브랜치 이름과 동일한 브랜치에 push 해야 한다.
1
2
# git push origin {자신의 작업한 브랜치 이름}
$ git push origin users

image

  • 위 이미지처럼 깃허브에 미리 만들어둔 리모트 레포지토리의 users 브랜치가 생기고, 여기에 작업한 내용이 올라가게 된다.

image

  • 깃허브에서 main 브랜치로의 PR을 생성함으로써 개발자 B에게 나의 작업 내역을 공유하고 머지 요청을 할 수 있게 된다.

image

  • 리뷰를 거쳐 PR이 승인되고, 작업 내역이 메인 브랜치에 머지되면 맡은 작업이 끝이 나는 것이다.
  • 작업이 완료된 브랜치는 깔끔한 정리를 위해 보통 삭제한다.

정리

  • 브랜치를 통해 하나의 프로젝트에서 독립된 작업 공간을 가질 수 있다.
  • 각 브랜치 별로 위 4가지 공간을 갖게 된다.
  • 협업할 때는 보통 각자 작업할 브랜치를 만들고 그 위에서 작업한다.
  • 리모트 레포지토리에서 각자 브랜치 작업을 리뷰받은 뒤, 메인 브랜치로 머지한다.

참조

0%