티스토리 뷰

Git&Github

[Git] Fast-Forward (병합 방법)

무화과(Fig) 2023. 10. 13. 13:19

오늘은 깃에서 병합하는 방법들 중에 fast-forward와 3 way merge 방식에 대해서 공부하려고 한다.

 

GIT에서 사용되는 병합 방법 2가지


1. fast-forward

 

branch간의 병합을 진행할 때 커밋이 생기지 않고 merge 명령어를 실행하는 브랜치의 Head Commit이 병합되는 branch의 Head commit으로 이동되는 방식이다. 

 

어떤 경우에서 사용될까?

서로 다른 브랜치의 base commit에 내용이 변경되지 않았을 때 사용된다. 이는 base commit이 커밋을 하지 않은 것과 동일한 의미를 갖는다.
직관적으로 예로 들자면, main branch에서 새로운 브랜치 하나를 생성 한 후에 main branch는 더이상 커밋하지 않고, 생성된 브랜치에서만 커밋을 하는 경우가 여기에 해당한다.

 

어떤 특이점이 있을까?

main branch의 커밋이 분리된 branch의 Head Commit으로 이동되기 때문에 merge commit 이력이 남지 않는다.
따라서 fast-forward 방식은, main branch의 Head Commit이 분리된 branch의 Head Commit 이후로 이동된다고 생각하면 된다.

 

 

 

main branch Head Commit > B | 현재 main의 버전은 B
main  branch에서 feature branch를 생성한다.
③ 생성된 기능 브랜치는, commit 버전을 2개 생성한다. ( X, Y )
④ 커밋 내역을 확인 해보니, feature branch는 main branch의 모든 버전(커밋)을 가지고 있다. (A->B)

 main branch에서 feature branch를 병합하게 되면, Fast-forward 방식으로 인해서 main의 Head위치가 commit Y로 이동하게 된다.

 

-> Fast-forward 방식은, 병합에 사용되는 branch가 병합하려는 branch의 모든 커밋내역을 가지고 있다면 병합 할 때 단순하게 커밋이 이동된다.

 

 

 

2. fast-forward가 아닌 상황

 

 

main branch의 커밋은 A->B->C | feature branch의 커밋은 A->B->X->Y
② feature branch는 main의 모든 커밋정보를 갖고있지 않다. (fast-forward X)
main  branch에서 feature branch를 병합하게 되면, 단순하게 커밋이동이 아니라 새로운 커밋이 생기면서 병합하게 된다.

 

 

 

 

main branch에서 병합하면 커밋 이력에 feature branch와 병합(merge)된 커밋으로 생성된다.