git branch와 git switch로 브랜치를 다루고 git merge로 합치며 fast-forward와 3-way 머지를 구분한다.
브랜치
브랜치(branch)는 Git의 가장 강력한 기능입니다. 메인 흐름을 건드리지 않고 갈래를 쳐서 따로 작업한 뒤, 완성되면 다시 합칠 수 있습니다. 새 기능 개발, 버그 수정, 실험을 안전하게 분리해 줍니다.
학습 목표
- 브랜치를 쓰는 이유를 이해한다.
git branch와git 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 포인터를 앞으로 밀기만 하면 됩니다. 새 머지 커밋이 생기지 않습니다.
이전: main ● feature ●──●──●
\____________/
이후: main 이 feature 끝으로 이동 ●──●──●──● (일직선)
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” 강좌에 대한 댓글입니다.