2. pull vs fetch, merge, squash and merge, rebase and merge

:D ·2023년 5월 31일
0
post-thumbnail

1. fetch vs pull

fetch : 원격 저장소의 최신 커밋을 로컬로 가져오기만 함
pull: 원격 저장소의 최신 커밋을 로컬로 가져와 merge 또는 rebase

2. fast forward merge vs 3-way-merge

fast forward merge는 브랜치를 병합할 때 굳이 다른 커밋을 만들지 않고, 현재 브랜치의 HEAD가 대상 브랜치의 HEAD로 옮기는 merge이다. 이 방식의 단점은 어떤 브랜치를 사용했고 언제 병합했는지 기록이 남지 않게된다. (rebase 할때 사용함!) 그림을 보면 다음과 같다 출처

그림을 보면 fast forward 시켜서 master의 HEAD를 옮겼다.

양쪽의 브랜치에서 커밋된 마디가 하나씩 있는 상태라면 fast forward merge를 해서는 안되고, 병합된 커밋을 만들어야한다.(3-way-merge)
그림을 보면 다음과 같다 출처


3-way-merge라고 부르는 이유(원리)는 두 개의 branch와 두 개의 branch의 공통 조상이 되는 branch의 커밋 내용을 대조하여 merge 과정에서 어떤것들을 병합하고, 어떤것들을 conflict를 내야할지 결정하기 때문이다.

3. merge vs squash and merge vs rebase and merge

이번에 디프만을 하면서 하는 딩동 프로젝트에서는 squash and merge를 사용하기로 했는데 기존에는 일반적인 merge 방법만 알고 있었다.
그래서 squash and merge, rebase and merge에 대해 알아보려고 한다.
먼저 각 merge를 그림으로 보면 다음과 같다. 출처

  • merge

    가장 기본적인 방법, 어느시점에 합쳐졌는지 알기 쉽다. 하지만 브랜치가 여러개 이고, 여러번의 merge가 생기면 커밋 히스토리를 파악하기 어려워질 수 있다.

  • Squash and Merge

    commit a + b+ c를 합쳐서 새로운 commit a,b,c가 만들어져 main branch에 붙게된다. 깔끔하게 commit history를 만들 수 있다.!

  • Rebase and Merge

    commit a, commit b, commit c 가 rebase가 되어 main branch에 붙게된다! 모든 commit 이력을 가지게 된다.

references

profile
강지영입니...🐿️

0개의 댓글