브랜치와 머지 (Branch & Merge)
브랜치는 커밋을 복사하지 않습니다. 특정 커밋 하나를 가리키는 이름표일 뿐이라 만드는 데 비용이 들지 않고, 그 이름표를 따로 옮기는 순간 줄이 갈라집니다. 다시 합칠 때 fast-forward · merge commit · squash · rebase 중 무엇을 고르느냐는 결국 히스토리에 어떤 모양을 남길지 고르는 일이고, 그 모양이 나중에 되돌릴 때의 난이도를 정합니다.
01브랜치와 머지 (Branch & Merge)
개념 한눈에 보기커밋은 한 줄로 쌓입니다. 각 커밋이 바로 앞 커밋을 가리키고, 그 사슬이 그대로 히스토리가 됩니다.
브랜치는 복사본이 아니라 이름표입니다. main 도 feature 도 커밋 하나를 가리킬 뿐이라, 만드는 데 값이 들지 않습니다.
이름표 하나를 따로 옮기면 줄이 갈라집니다. feature 에 커밋을 쌓는 동안 main 은 가리키던 자리에 그대로 있습니다.
그사이 main 이 움직이지 않았다면 합칠 것이 없습니다. 이름표만 앞으로 밀면 되고, 이것이 fast-forward 입니다.
main 도 움직였다면 두 줄을 이어 줄 커밋이 필요합니다. 부모가 둘인 커밋을 새로 만들어 잇는 것이 merge commit 입니다.
브랜치의 커밋들을 하나로 접어 올릴 수도 있습니다. squash 는 갈래를 남기지 않고 새 커밋 한 점만 main 에 얹습니다.
아예 줄을 다시 세울 수도 있습니다. rebase 는 브랜치 커밋을 최신 main 위에 새로 쓰므로, 내용이 같아도 해시가 다른 커밋이 됩니다.
같은 작업인데 남는 모양이 셋으로 갈립니다. 갈래를 남길지, 한 점으로 접을지, 한 줄로 펼지의 차이입니다.
되돌릴 때 그 차이가 드러납니다. 한 점이면 revert 도 한 번이고, 갈래가 남았으면 어느 쪽을 되돌릴지 지정해야 합니다.
브랜치를 오래 두면 main 이 멀리 가버립니다. 그동안 벌어진 차이가 전부 충돌 후보라, 합치는 값이 시간에 비례해 늘어납니다.
같은 일을 짧게 잘라 자주 합치면 충돌할 거리가 생기기 전에 만납니다. 가장 크게 작용하는 변수는 머지 방식이 아니라 브랜치 수명입니다.
02 쉽게 이해하기
For Everyone브랜치는 복사본이 아니라 커밋 하나를 가리키는 이름표라 만드는 데 값이 들지 않습니다. 갈래는 두 이름표가 서로 다른 커밋을 가리킬 때 생기고, 합치는 방식은 히스토리에 무엇을 남길지를 정합니다.
커밋은 앞 커밋을 가리키며 사슬로 이어지고, 브랜치는 그 사슬의 한 점을 가리키는 이름입니다.
합치는 방식은 넷입니다.
fast-forward 는 갈래가 안 생겼을 때 이름표만 앞으로 미는 것, merge commit 은 부모가 둘인 커밋으로 두 줄을 잇는 것, squash 는 브랜치의 커밋들을 새 커밋 한 점으로 접어 올리는 것, rebase 는 브랜치 커밋을 최신 줄 위에 다시 써서 한 줄로 펴는 것입니다.
rebase 는 커밋을 새로 만들기 때문에 내용이 같아도 해시가 달라집니다.
- –PR 머지 방식 정하기
- –되돌리기 쉬운 히스토리 만들기
- –충돌이 커지기 전에 브랜치 수명 관리하기
- –팀 규칙으로 squash·rebase 고르기
03 자주 묻는 질문
FAQ브랜치와 머지 (Branch & Merge)란 무엇인가요?+
브랜치는 커밋을 복사하지 않습니다. 특정 커밋 하나를 가리키는 이름표일 뿐이라 만드는 데 비용이 들지 않고, 그 이름표를 따로 옮기는 순간 줄이 갈라집니다. 다시 합칠 때 fast-forward · merge commit · squash · rebase 중 무엇을 고르느냐는 결국 히스토리에 어떤 모양을 남길지 고르는 일이고, 그 모양이 나중에 되돌릴 때의 난이도를 정합니다.
브랜치와 머지 (Branch & Merge)은(는) 어디에 사용하나요?+
PR 머지 방식 정하기, 되돌리기 쉬운 히스토리 만들기, 충돌이 커지기 전에 브랜치 수명 관리하기, 팀 규칙으로 squash·rebase 고르기
브랜치와 머지 (Branch & Merge)를 쉽게 비유하면?+
브랜치는 복사본이 아니라 커밋 하나를 가리키는 이름표라 만드는 데 값이 들지 않습니다. 갈래는 두 이름표가 서로 다른 커밋을 가리킬 때 생기고, 합치는 방식은 히스토리에 무엇을 남길지를 정합니다.
