🛤️ 상황 예시
학교 프로젝트를 하고 있다고 가정해봅시다:
- develop 브랜치: "메인 작업 노트"
- feature/homework 브랜치: "개인 과제 작업 노트"
두 노트에서 작업을 했고, 이제 노트를 합쳐야 하는 상황입니다.
1. merge: 작업 흔적을 그대로 합치기
merge는 두 노트를 합칠 때, 각자의 작업 흔적을 모두 남기는 방식입니다.
쉽게 말해, 두 사람의 기록을 그냥 옆에 이어붙인다고 보면 됩니다.
- 결과: 새로운 "합친 기록"이 생기지만, 각자의 기록은 그대로 남습니다.
- 히스토리: 작업 과정을 시간순으로 볼 수 있습니다.
🖊️ 예:
- develop에 "학교 시간표 작성"이 기록되어 있음.
- feature/homework에 "과제 초안 작성"이 기록되어 있음.
merge를 하면:
* (merge commit) 과제와 시간표를 합쳤다
|\
| * 과제 초안 작성 (feature/homework)
|/
* 학교 시간표 작성 (develop)
- 장점: 작업의 과정을 그대로 보존합니다.
- 단점: 히스토리가 복잡해질 수 있습니다.
2. rebase: 작업을 다시 쓰기
rebase는 두 노트를 합칠 때, 작업을 새로 정리해서 하나의 깔끔한 노트로 만드는 방식입니다.
쉽게 말해, 한쪽의 작업을 다른 작업 위에 다시 써서 합칩니다.
- 결과: 두 작업이 마치 처음부터 같이 진행된 것처럼 보입니다.
- 히스토리: 작업 과정이 직선형으로 정리됩니다.
🖊️ 예:
- develop에 "학교 시간표 작성"이 기록되어 있음.
- feature/homework에 "과제 초안 작성"이 기록되어 있음.
rebase를 하면:
* 과제 초안 작성 (rebased feature/homework)
* 학교 시간표 작성 (develop)
- 장점: 히스토리가 깔끔해집니다.
- 단점: 작업 과정을 다시 쓰는 것이므로, 충돌(conflict)이 생기기 쉽습니다.
🚦 merge와 rebase의 선택 기준
- 팀 협업이 많고 기록이 중요할 때:
merge를 사용하세요. 작업 과정을 그대로 남기기 때문에, 누가 언제 무엇을 했는지 알기 쉽습니다. - 개인 프로젝트이고 기록을 깔끔히 정리하고 싶을 때:
rebase를 사용하세요. 히스토리가 직선형으로 정리되어 나중에 이해하기 쉽습니다.
🎨 간단 비교표
Merge | Rebase | |
히스토리 | 기록을 모두 보존 | 기록을 깔끔히 정리 |
충돌 처리 | 상대적으로 쉬움 | 충돌이 자주 발생할 수 있음 |
협업 | 협업 시 적합 | 협업 시 주의 필요 |
장점 | 작업 과정을 그대로 볼 수 있음 | 직선형 히스토리로 정리되어 깔끔함 |
단점 | 히스토리가 복잡해질 수 있음 | 작업 과정을 다시 쓰는 데 시간 필요 |
🔑 기억해야 할 핵심
- merge: 두 작업을 그대로 합친다.
- rebase: 한 작업을 다른 작업 위로 다시 쓴다.
댓글