깃에서 병합하는 방법들 중에 fast-forward
와 3 way merge
방식에 대해서 알아보겠습니다.
base
는 서로 다른 브랜치들에 부모가 되는 커밋 입니다.
fast-forward 방법은, branch
간의 병합을 진행할 때 커밋이 생기지 않고 merge 명령어를
실행하는 브랜치의 Head Commit이 병합 되는 branch
의 Head commit으로 이동되는
방식 입니다.
❗ 서로 다른 브랜치의 base commit에 내용이 변경되지 않았을 때 사용 됩니다.
이는 base commit이 커밋을 하지 않은 것과 동일한 의미를 갖는다.
직관적으로 예로 들자면, master branch에서 새로운 브랜치 하나를 생성 한 후에
master branch는 더이상 커밋하지 않고, 생성된 브랜치에서만 커밋을 하는 경우
단순하게 master branch의 커밋이 분리된 branch의 Head Commit으로 이동되기 때문에
merge commit 이력이 남지 않습니다.
✔️ fast-forward 방식은, master branch의 Head Commit이 분리된 branch의
Head Commit 이후로 이동된다고 생각 하시면 됩니다.
① master branch
의 Head Commit > B
| 현재 master의 버전은 B
② master branch
에서 feature branch
를 생성 합니다.
③ 생성된 기능 브랜치는, commit
버전을 2개 생성 합니다 ( X, Y )
④ 커밋 내역을 확인 해보니, feature branch
는 master branch
의 모든 버전(커밋)을
가지고 있습니다. (A->B)
⑤ master branch
에서 기능브랜치를 병합하게 되면, Fast-forward 방식으로 인해서
단순하게 master의 Head
위치가 commit Y
로 이동하게 됩니다.
❗ Fast-forward 방식은, 병합에 사용되는 branch가 병합하려는 branch의 모든 커밋내역을 가지고
있다면 병합 할 때 단순하게 커밋이 이동됩니다.
① master branch
의 커밋은 A->B->C | feature branch
의 커밋은 A->B->X->Y
② 기능브랜치는 master의 모든 커밋정보를 갖고있지 않습니다. (fast-forward X)
③ master branch
에서 기능브랜치를 병합하게 되면, 단순하게 커밋 이동이 아니라
새로운 커밋이 생기면서 병합하게 됩니다.
Master branch
에서 병합하면 커밋 이력에 feature branch
와 병합(merge)된 커밋으로 생성 됩니다,
1. main(master) branch
에서 파일 생성 후 커밋
2. 브랜치를 생성하고, 브랜치에서 파일에 내용을 여러번 수정 후 커밋합니다.
3. main branch
에서 other branch
를 병합하고 깃 로그 확인하기
번외. fast-forward
방식은? 병합을 하지 않고 단순하게 커밋 이동한 것과 같은 결과를 낸다.