[Git] Fast-forward merge VS 3-way merge

이수정·2022년 11월 28일
0

[1] Fast-forward merge

  • 두 브랜치의 공통 조상(base)이 동일한 것

  • git merge를 해도 새로운 commit이 생기지 않는다.

    • 다만, 쳐진 브랜치의 참조 개체가 앞서 있는 브랜치가 가리키는 개체를 참조하도록 이동할 뿐이다. -> 충돌이 발생하지 않는다.

    • Fast-forward (빨리감기)

  • 예시

💡 merge 할 때보면 Fast-forward라고 적혀있는 부분을 볼 수 있다.


추가) 기본적으로 fast-forward merge를 할 때는 커밋 로그가 남지 않는다. 하지만, --no-ff 옵션을 통해 커밋 로그를 남길 수 있다.

  • 예시

💡 git log를 보면 커밋 로그가 남아있는 것을 볼 수 있다.




[2] 3-way merge

  • 두 브랜치가 base에서 분기해 나감.

  • 이제 git merge를 하면 새로운 commit이 생성

    • base를 기준을 자동 병합을 진행한다.

만약, base에서 분기한 두 브랜치 모두에서 변경한 파일에 대해서 merge를 할 때 confilct(충돌)이 발생한다.
[ 해결 ]
💡 파일을 보면 충돌 난 부분이 표시되어 있는데 둘 중 하나를 남기고 다시 git add / commit을 하면 된다.

💡 이 두 브랜치의 log를 살펴보면 공통 조상이 다른 것을 알 수 있다.

💡 이제 이 두 브랜치를 merge를 하면 Fast-forward가 쓰여져 있지 않다.

병합 할 때 커밋 로그를 어떻게 남길 것인지 편집기로 작성이 가능하다.

profile
개발 공부 기록

0개의 댓글