dev.syw

git branch와 git switch로 브랜치를 다루고 git merge로 합치며 fast-forward와 3-way 머지를 구분한다.

브랜치

브랜치(branch)는 Git의 가장 강력한 기능입니다. 메인 흐름을 건드리지 않고 갈래를 쳐서 따로 작업한 뒤, 완성되면 다시 합칠 수 있습니다. 새 기능 개발, 버그 수정, 실험을 안전하게 분리해 줍니다.

학습 목표

  • 브랜치를 쓰는 이유를 이해한다.
  • git branchgit switch(및 git checkout)로 브랜치를 다룬다.
  • git merge로 브랜치를 합친다.
  • fast-forward 머지와 3-way 머지를 구분한다.

왜 브랜치를 쓰나

main 브랜치에서 직접 새 기능을 만들다 보면, 작업이 반쯤 된 불안정한 코드가 메인에 섞입니다. 브랜치를 쓰면

  • 기능마다 독립된 갈래에서 작업해 메인을 항상 안정적으로 유지한다.
  • 여러 작업을 동시에 진행하고 필요할 때만 합친다.
  • 실험이 실패하면 그 브랜치만 버리면 된다.
        feature/login  ●──●──●
                      /
main  ●──●──●──●──●──────────  (안정 상태 유지)

브랜치 만들기와 이동: git switch

브랜치 목록을 보고, 새로 만들고, 이동합니다. 최신 Git에서는 이동에 git switch를 권장합니다(예전엔 git checkout을 썼습니다).

git branch                 # 브랜치 목록 (현재 브랜치에 * 표시)
git branch feature/login   # 새 브랜치 생성(이동은 안 함)
git switch feature/login   # 해당 브랜치로 이동
git switch -c feature/login  # 생성과 이동을 한 번에
git switch main            # main 으로 돌아오기

예전 방식인 git checkout도 여전히 동작합니다.

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   # 강제 삭제(병합 안 됐어도)

합치기: git merge

작업이 끝난 브랜치를 다른 브랜치(보통 main)에 합칩니다. 합쳐 받을 브랜치로 이동한 뒤 git merge를 실행합니다.

git switch main            # 받는 쪽(main)으로 이동
git merge feature/login    # feature/login 을 main 에 합친다

fast-forward vs 3-way 머지

머지에는 두 가지 방식이 있습니다.

Fast-forward 머지main이 브랜치를 만든 이후로 한 번도 바뀌지 않았다면, Git은 그냥 main 포인터를 앞으로 밀기만 하면 됩니다. 새 머지 커밋이 생기지 않습니다.

이전:  mainfeature ●──●──●
                \____________/

이후:  mainfeature 끝으로 이동  ●──●──●──● (일직선)

3-way 머지main도 그동안 새 커밋이 쌓였다면, 양쪽 변경을 함께 반영하는 새 머지 커밋이 만들어집니다. 세 지점(두 브랜치의 끝 + 공통 조상)을 비교한다고 해서 3-way라 부릅니다.

main     ●──●──●──●──◆  ← 머지 커밋(부모가 둘)
              \      /
feature        ●──●

양쪽이 같은 곳을 다르게 고쳤다면 충돌(conflict) 이 날 수 있는데, 이는 다음 강좌에서 다룹니다. 일직선 이력을 선호한다면 fast-forward로 합칠 수 있을 때까지 정리하거나, --no-ff 옵션으로 항상 머지 커밋을 남길 수도 있습니다.

git merge --no-ff feature/login   # fast-forward 가능해도 머지 커밋을 만든다

요약

브랜치는 메인을 안전하게 두고 따로 작업하기 위한 갈래입니다. git switch -c로 만들고 이동한 뒤, 완성되면 받는 브랜치로 돌아와 git merge로 합칩니다. 메인이 그대로면 fast-forward, 양쪽이 함께 변했으면 3-way 머지가 일어납니다. 다음 강좌에서는 원격 저장소와 주고받는 법을 배웁니다.

함께 보면 좋은 자료

📚 레퍼런스

댓글 0

Git & GitHub강좌에 대한 댓글입니다.

댓글을 작성하려면 로그인이 필요합니다.