Git Merge vs Rebase: 어떤 전략이 팀을 문제에서 지켜줄까요?
By Mirko Peters ·
Git merge와 rebase의 핵심 차이점을 알아보세요. 팀의 코드 히스토리를 안전하고 깔끔하게 유지하는 rebase의 황금률도 확인할 수 있습니다.
Automatically translated with AI from the original post. Read the English original

Git에서 코드를 다시 합칠 때 merge와 rebase 중 무엇을 선택하느냐에 따라 프로젝트 히스토리가 어떻게 보존되고, 팀원의 작업을 덮어쓸 위험이 있는지가 결정됩니다. Merge는 merge 커밋을 통해 완전한 히스토리 기록을 남기는 반면, rebase는 커밋을 main 브랜치 최상단으로 옮겨 깔끔한 선형 히스토리를 만듭니다. 하지만 공유 브랜치에 적용하면 위험한 작업이 됩니다.
핵심 요약
- Merge는 전용 merge 커밋을 사용해 코드 브랜치가 언제, 어떻게 합쳐졌는지에 대한 정확한 히스토리를 보존합니다.
- Rebase는 커밋 히스토리를 다시 써서 불필요한 merge 커밋 없이 깔끔하고 일직선인 타임라인을 만듭니다.
- 다른 개발자가 활발히 작업 중인 공유 브랜치는 절대 rebase하지 마세요. 그들의 로컬 복사본이 깨지고 파괴적인 덮어쓰기가 강제로 일어날 수 있습니다.
- Rebase는 자신만 사용하는 로컬 브랜치에서만 사용하고, 풀 요청을 게시하기 전에 어수선한 커밋을 정리하는 용도로 활용하세요.
- 협업 프로젝트에서 확신이 서지 않을 때는 공유된 버전의 기준을 유지하는 가장 안전한 방법으로 merge를 기본값으로 선택하세요.
Git Merge의 작동 원리 이해하기
Merge는 협업 개발의 기본적인 안전망입니다. 기능 브랜치 작업을 마치고 풀 요청이 승인되면, merge는 새로운 merge 커밋을 생성해 변경 사항을 main 브랜치와 결합합니다. 이 커밋은 서로 다른 두 히스토리가 합쳐진 정확한 시점을 명확하게 기록합니다.
이 방식의 가장 큰 장점은 완전한 투명성입니다. 아무것도 다시 쓰지 않고, 아무것도 잃지 않습니다. 몇 주 뒤에 버그가 발견되더라도 커밋 로그를 살펴보면 특정 기능 브랜치가 어느 화요일에 merge되었는지 분명하게 확인할 수 있습니다. 깔끔한 그래프 모양보다 감사 가능성과 절대적인 안전성을 우선하는 팀이라면, merge가 표준 운영 절차가 되어야 합니다.
Git Rebase의 매력과 위험
Rebase는 근본적으로 다른 방식을 택합니다. 기능 브랜치가 갈라진 시점의 흐름을 보존하는 대신, rebase는 커밋을 원래의 시작점에서 떼어내 main 브랜치의 최신 버전 위에 깔끔하게 다시 올려놓습니다. 이 과정에서 새로운 커밋이 생성되므로, 모든 사람이 순차적으로 작업한 것처럼 보이는 매끄러운 선형 히스토리가 만들어집니다.
많은 개발자가 이 깔끔한 시각화를 좋아합니다. 복잡하게 얽힌 merge 선 없이 프로젝트 히스토리를 쉽게 읽을 수 있기 때문입니다. 하지만 이러한 미관에는 심각한 운영상의 대가가 따릅니다. Rebase는 말 그대로 히스토리를 다시 쓰기 때문에 커밋 식별자가 바뀝니다. 다른 사람이 자신의 로컬 컴퓨터로 가져간 브랜치에 이를 적용하면, 그 사람의 작업 상태는 즉시 여러분의 것과 달라지게 됩니다.
Git Rebase의 황금률
일상적인 Git 사용에서 가장 중요한 규칙은 간단합니다. 다른 사람이 작업 중인 브랜치는 절대 rebase하지 마세요. rebase 명령을 실행하기 전에 반드시 중요한 질문을 던져야 합니다. 다른 누군가가 이 브랜치를 보고 있거나 이 위에 작업을 쌓고 있는가?
그렇다면 즉시 멈추고 대신 merge를 사용하세요. 강제로 rebase한 뒤 그 다시 쓴 변경 사항을 원격에 푸시하면 팀원의 로컬 복사본이 깨집니다. 그들이 푸시하거나 풀을 시도할 때 Git은 대규모 충돌을 표시하고, 결국 파괴적인 강제 푸시가 필요해져 동료들이 몇 시간 동안 힘들게 작업한 내용을 실수로 날려버릴 수 있습니다.
안전한 Rebase 워크플로
리베이스가 본질적으로 나쁜 것은 아닙니다. 다만 의도된 범위를 벗어나 적용될 때 잘못 사용되는 것입니다. 리베이스를 가장 적절하게 사용할 수 있는 곳은 공개 리뷰를 위해 풀 리퀘스트를 열기 전, 자신의 로컬 비공개 기능 브랜치입니다.
어려운 버그를 추적하는 동안 "typo 수정", "다시 시도", "아차, 세미콜론 빠뜨림" 같은 지저분하고 세분화된 커밋을 수십 개 만들었다면, 리베이스를 사용해 이 커밋들을 하나의 일관된 흐름으로 합치고 순서를 재배열할 수 있습니다. 비공개 브랜치가 정리되면 푸시하고 풀 리퀘스트를 연 뒤, 표준 병합을 통한 협업 리뷰 과정에 안전하게 맡기시면 됩니다.
결론
병합과 리베이스의 미묘한 차이를 이해하면 치명적인 데이터 손실을 막고 팀 내 마찰을 최소화할 수 있습니다. 과거 이력의 맥락을 보존해야 할 때와 깔끔한 선형 타임라인을 유지해야 할 때를 구분하면 개발 워크플로가 원활하고 효율적으로 진행됩니다. 더 기본적인 개념과 폭넓은 배포 전략을 알아보려면 팟캐스트의 전체 에피소드 듣기에서 전문 용어 없이 쉽게 풀어 설명한 내용을 확인해 보시기 바랍니다.
자주 묻는 질문
Git 병합 중에는 무슨 일이 일어나나요?
Git 병합은 서로 갈라져 있던 두 브랜치의 이력을 합쳐 새로운 병합 커밋을 만듭니다. 기존 커밋 해시를 변경하지 않으면서 두 브랜치의 원래 이력을 모두 보존합니다.
공유 브랜치에서 리베이스가 위험하다고 여겨지는 이유는 무엇인가요?
리베이스는 새로운 커밋 해시를 생성하여 커밋 이력을 다시 씁니다. 같은 브랜치에서 작업하는 다른 개발자의 로컬 복사본이 원격 저장소와 더 이상 일치하지 않게 되어 심각한 충돌 오류와 잠재적인 데이터 손실로 이어질 수 있습니다.
git rebase는 언제 안전하게 사용해야 하나요?
지저분한 커밋 메시지를 정리하거나 풀 리퀘스트를 열기 전에 main의 최신 변경 사항을 가져올 때에만 자신의 로컬 비공개 기능 브랜치에서 git rebase를 사용하시기 바랍니다.
병합하면 추가 커밋이 생기나요?
네, 병합은 일반적으로 기능 브랜치가 main 브랜치에 통합된 정확한 시점을 기록하기 위해 프로젝트 이력에 병합 커밋을 추가합니다.