Git 병합 이해하기

신석진( Seokjin Shin)·2023년 10월 18일
0

프로젝트 중에 병합을 하는데 의도한 결과와 다르게 동작하여 당황한 경험이 있다. 이에 개념을 잡아보고자 한다.

--ff

fast-forward의 약자로 병합하려는 대상 브랜치에 다른 변경점이 발견되지 않으면 작업 브랜치를 그대로 가져다 붙이는 옵션이다.
--ff

--no-ff

병합하려는 대상 브랜치에 현재 브랜치 생성 시점 이후 커밋이 존재할 경우 fast forward는 사용할 수 없다 이때는 병합 커밋을 남기는 --no-ff 옵션을 사용한다. 이전 커밋들의 해쉬코드들을 추적할 수 있어서 여러개의 브랜치가 한시점에 생성되어 병합되었을 때 그래프에서 무지개를 볼 수 있다.
--no-ff

rebase

현재 브랜치의 커밋들을 병합하려는 브랜치의 커밋 위로 쌓아올린다. 브랜치 자체가 처음부터 하나였던 것처럼 동작한다. 그래프가 하나로 보이므로 깔끔하게 내역을 기록할 수 있다
rebase

squash

현재 브랜치의 커밋들을 하나의 커밋으로 뭉쳐서 병합하려는 브랜치 위로 쌓는다. 현재 브랜치에서는 같은 내용의 파일 변경 사항이라도 커밋의 해쉬코드가 달라서 다른 커밋으로 인식한다.
squash

squash(branch deleted)

스쿼시로 병합 작업을 진행했던 브랜치가 삭제되면 no ff와 다르게 이력이 남지 않는다. 원래부터 커밋을 하나만 만들고 rebase를 실행한 것과 같다. 다만 차이점은 다른 커밋으로 인식한다는 점이다.
squash(delete)

0개의 댓글