완성된 기능 메인 브랜치에 안전하게 합치기
테스트가 완료된 브랜치의 작업 내용을 메인 코드 베이스에 안전하게 합치는 git merge 명령어의 활용 방법을 설명합니다.
지난 시간의 철저한 워크플로우를 거치며 우리는 평행우주(`feature-darkmode` 브랜치) 안에서 멋진 다크모드 기능을 완성했고 커밋도 무사히 마쳤습니다. 하지만 웹사이트 방문자들은 여전히 원본 우주인 `main` 브랜치의 코드만 보고 있기 때문에 우리가 만든 다크모드 버튼을 볼 수 없습니다. 이제 격리된 병동에서 테스트를 완벽하게 끝낸 안전한 코드를, 우리의 튼튼한 기둥인 `main` 브랜치로 흡수하여 정식 서비스로 올릴 차례입니다. 이 합침의 과정을 Git에서는 '병합(Merge)'이라고 부릅니다.
하나로 합쳐지는 강물: 병합(Merge)의 개념
`main`이라는 큰 강물이 흐르고 있고, 우리는 거기서 물길을 얇게 하나 파내어 `feature-darkmode`라는 작은 시냇물을 만들었습니다. 이 시냇물에서 우리는 온갖 실험을 성공적으로 마쳤습니다. 이제 이 맑아진 시냇물을 다시 원래의 큰 강물(`main`)로 돌려보내어 강물의 수량을 불려야 합니다.
`git merge`는 이렇게 나뉘었던 두 개의 브랜치(역사의 흐름)를 하나로 묶어주는 명령어입니다. 여기서 헷갈리지 말아야 할 아주 중요한 규칙이 하나 있습니다.
"흡수 당하는 쪽에서 명령을 내리는 것이 아니라, 흡수하는 주체(주인공)의 입장에서 빨아들일 대상을 지목해야 한다"는 것입니다. 우리는 `feature` 시냇물을 `main` 강물로 가져올 것이므로, 현재 내 위치는 반드시 넓은 강물인 `main` 브랜치여야 합니다.
실전 병합의 3단계 흐름
병합을 수행하는 과정은 항상 다음의 3단계를 기계적으로 따르게 됩니다.
1. 주인공 브랜치로 이동하기 (`checkout`)
가장 먼저 내가 돌아갈 고향이자 모든 것을 흡수할 본체인 `main` 브랜치로 넘어와야 합니다. 터미널에 `git checkout main` (또는 `git switch main`)을 쳐서 포털을 탑니다. `main`에 오자마자 코드를 확인해 보면, 우리가 열심히 만들었던 다크모드 코드가 감쪽같이 사라진 것을 보고 놀라게 됩니다. 당연합니다. 다크모드는 시냇물에만 있고 여기 강물에는 아직 합쳐지지 않았기 때문입니다.
병합을 위한 준비 이동
$ git checkout main
Switched to branch 'main'반드시 주인공인 `main` 브랜치로 무사히 넘어왔다는 터미널의 확인 메시지를 본 뒤에 다음 작업을 진행해야 합니다.
2. 대상 브랜치를 지목하여 합치기 (`merge`)
이제 주인공의 입장에서 흡수할 대상을 명령어로 부릅니다. 터미널에 `git merge feature-darkmode`라고 입력합니다. "저기 있는 `feature-darkmode` 브랜치의 모든 작업 내역을 싹 다 지금 내가 있는 이 `main` 브랜치로 끌고 와서 합쳐라!"라는 뜻입니다.
Fast-forward 병합 메시지 분석
bash```bash
$ git merge feature-darkmode
Updating 1a2b3c4..5f6g7h8
Fast-forward
index.html | 2 ++
style.css | 5 +++++
2 files changed, 7 insertions(+)
```- 1정상적으로 명령이 수행되면 터미널에 'Fast-forward'라는 반가운 단어가 뜹니다.
- 2이것은 main 브랜치와 feature 브랜치 사이에 아무런 걸림돌이나 모순점이 없어서, 마치 빨리 감기(Fast-forward) 비디오테이프를 윙 돌리듯이 부드럽게 앞쪽의 최신 코드로 상태가 쑥 이동했다는 완벽한 성공을 의미합니다.
성공 메시지를 본 후 `index.html` 파일을 다시 열어보면, 사라졌던 다크모드 버튼 코드가 `main` 기둥에 예쁘게 안착해 있는 것을 확인할 수 있습니다! 방문자들에게 새로운 기능을 서비스할 준비가 완료된 것입니다.
3. 다 쓴 평행우주 폭파시키기 (선택사항)
기능도 완벽히 합쳤으니, `feature-darkmode`라는 나뭇가지는 이제 그 소임을 다했습니다. 계속 놔두면 나중에 브랜치가 수십 개로 늘어나 터미널 화면이 지저분해집니다. 이미 코드는 `main`에 모두 안전하게 복사되었으므로, 과거의 껍데기만 남은 이 브랜치는 깔끔하게 지워주는 것이 프로들의 관습입니다.
브랜치를 삭제할 때는 소문자 `-d` 옵션을 씁니다. `git branch -d feature-darkmode`를 입력하면 "Deleted branch..." 메시지와 함께 평행우주가 역사 속으로 사라집니다. (소문자 `-d`는 이미 병합이 완료된 안전한 브랜치만 지워주는 똑똑한 옵션이며, 대문자 `-D`는 병합 안 된 것도 강제로 날려버리는 위험한 옵션입니다.)
Merge 전 체크리스트
- 1반드시 git status를 쳐서 내 현재 위치가 합쳐진 결과물을 받을 'main' 브랜치인지 확인한다.
- 2main 브랜치 위에 미처 commit하지 않은 지저분한 파일들이 없는지(clean) 다시 한번 확인한다.
- 3합치고자 하는 대상 브랜치의 이름을 정확한 스펠링으로 타이핑한다.
우리는 이제 기능마다 나뭇가지를 치고(`branch`), 안전하게 코드를 짜고 테스트한 뒤(`commit`), 다시 튼튼한 기둥으로 합치는(`merge`) 고급 기술을 익혔습니다. 바이브코딩으로 아무리 복잡한 기능을 추가하더라도 이 패턴 안에서는 절대 원본 코드가 무너질 일이 없습니다.
개념 퀴즈
퀴즈 답을 맞춰야 학습 완료가 됩니다.작업 중이던 'new-design' 브랜치에서의 기능 개발이 성공적으로 끝나서, 이 변경 사항을 실제 서비스 중인 메인 코드 베이스인 'main' 브랜치에 정식으로 포함(병합)시키려고 합니다. 올바른 병합 순서는 무엇인가요?
3줄 요약
- 1분리된 브랜치에서 안전하게 테스트와 커밋을 마친 코드를 다시 원본 기둥(main)으로 합치는 작업을 병합(Merge)이라고 합니다.
- 2병합을 수행할 때는 반드시 흡수하는 주체인 main 브랜치로 이동(checkout)한 상태에서 대상을 지목(git merge [대상브랜치])해야 합니다.
- 3main으로 병합이 완전히 끝난 작업용 브랜치는 git branch -d 명령어를 통해 삭제하여 프로젝트의 브랜치 목록을 깔끔하게 유지하는 것이 좋습니다.