GitGit/GitHub 기초 · 3입문

브랜치와 머지 — 독립적으로 작업하고 합치기

Git브랜치머지conflictbranch

브랜치가 필요한 이유

gitGraph
    commit id: "초기 설정"
    commit id: "기본 기능"
    branch feature/login
    checkout feature/login
    commit id: "로그인 폼"
    commit id: "로그인 검증"
    checkout main
    branch feature/signup
    checkout feature/signup
    commit id: "회원가입 폼"
    checkout main
    merge feature/login id: "로그인 병합"
    merge feature/signup id: "회원가입 병합"

브랜치를 쓰면 기능 개발, 버그 수정, 실험을 메인 코드에 영향 없이 할 수 있습니다.


브랜치 기본 조작

# 브랜치 목록 확인
git branch
# * main
#   feature/login

# 새 브랜치 만들기
git branch feature/login

# 브랜치 이동
git checkout feature/login
# 또는 (최신 방식)
git switch feature/login

# 만들면서 바로 이동
git checkout -b feature/login
git switch -c feature/login   # 최신 방식

# 브랜치 삭제
git branch -d feature/login   # 병합된 브랜치
git branch -D feature/login   # 강제 삭제

머지: 브랜치 합치기

# main 브랜치에서
git switch main

# feature/login을 main에 병합
git merge feature/login

# 병합 완료 후 브랜치 정리
git branch -d feature/login

Fast-forward 머지

gitGraph
    commit id: "A"
    commit id: "B"
    branch feature
    checkout feature
    commit id: "C"
    commit id: "D"
    checkout main
    merge feature id: "Fast-forward"

main에 새 커밋이 없으면 포인터만 이동합니다 (Fast-forward).

3-way 머지

gitGraph
    commit id: "A"
    commit id: "B"
    branch feature
    checkout feature
    commit id: "C"
    checkout main
    commit id: "D"
    merge feature id: "Merge commit"

양쪽에 새 커밋이 있으면 새 머지 커밋이 생성됩니다.


충돌(Conflict) 해결

같은 파일의 같은 줄을 양쪽에서 수정하면 충돌이 발생합니다.

git merge feature/login
# CONFLICT (content): Merge conflict in index.html
# Automatic merge failed; fix conflicts and then commit the result.

충돌 파일을 열면:

<<<<<<< HEAD
<title>메인 제목</title>
=======
<title>로그인 페이지</title>
>>>>>>> feature/login
  • <<<<<<< HEAD ~ =======: 현재 브랜치(main)의 내용
  • ======= ~ >>>>>>>: 병합하려는 브랜치의 내용

원하는 내용으로 수정 후:

<title>로그인 페이지</title>
# 충돌 해결 후
git add index.html
git commit -m "merge: feature/login 병합, 타이틀 충돌 해결"

rebase: 깔끔한 이력 만들기

gitGraph
    commit id: "A"
    commit id: "B"
    branch feature
    checkout feature
    commit id: "C (재배치)"
    commit id: "D (재배치)"
    checkout main
    merge feature id: "Fast-forward"
# feature 브랜치에서
git switch feature/login
git rebase main

# 이후 main에서 fast-forward 머지
git switch main
git merge feature/login

rebase는 커밋을 재작성해 직선형 이력을 만듭니다. 공유 브랜치에서는 사용 주의.


브랜치 전략

main          — 배포 가능한 안정 코드
develop       — 개발 통합 브랜치
feature/xxx   — 기능 개발
fix/xxx       — 버그 수정
release/x.x   — 릴리즈 준비
hotfix/xxx    — 긴급 수정

정리

명령어역할
git branch <name>브랜치 생성
git switch <name>브랜치 이동
git switch -c <name>생성+이동
git merge <branch>브랜치 병합
git rebase <branch>커밋 재배치
git branch -d <name>브랜치 삭제

다음 편에서는 GitHub 원격 저장소 — 코드를 원격에 올리고 팀원과 공유하는 방법을 배웁니다.

궁금한 점이 있으신가요?

협업·의뢰는 아래로, 가벼운 소통은 인스타그램 @bluefox._.hi도 환영이에요.