git merge 방법들

sunghun kim·2024년 8월 26일

[git]

목록 보기
5/10

출처: git기초 (코딩애플)


브랜치를 합칠 때 git merge 를 사용합니다.
이때 merge의 다양한 방법이 있습니다.


처음에는 어떤 merge를 사용할지 고민하지 맙시다.
나중에 취직했을 때 중요한 브랜치마다 merge 방법 가이드라인이 있다고 합니다.


3-way merge

브랜치에서 각각 신규 commit이 1회 이상 있는 경우 사용되는 merge입니다.
새로운 commit이 생기는 방법입니다.


fast-foward merge

master 브랜치에서는 commit이 없고 새로운 브랜치에서만 commit이 있을 때
새로운 브랜치가 master 브랜치가 되는 경우 입니다.

참고로 git merge --no-ff 브랜치명 을 입력해서 강제로 3-way merge 할 수도 있습니다.


rebase and merge

rebase는 브랜치의 시작점을 다른 commit으로 옮겨주는 행위입니다.
rebase를 이용해서 새로운 브랜치의 시작점을 master(main) 브랜치의 최근 commit으로 옮긴 다음 fast-foward merge 하는 방법입니다.

3-way merge 말고 강제로 fast-foward 하고 싶을 때 사용하고,
commit 내역을 한 줄로 계속 이어서 남기고 싶을 대 사용합니다.
(간단한 commit인 경우 log가 깔끔하게 보이게 됩니다.)

사용방법

새로운 브랜치로 먼저 이동(switch)해서 git rebase master를 입력합니다.
그럼 새로운 브랜치가 master 브랜치 끝으로 이동해서 연결되는데
다시 master 브랜치로 이동(switch)해서 fast-foward merge 하면 됩니다.

단점

브랜치끼리 차이가 많은 경우 rebase 하면 conflict(충돌)이 많이 발생할 수 있습니다.


squash and merge

모든 브랜치를 3-way merge 하면 복잡해보이거나
git log 했을 때 연결된 branch 의 commit 내역이 모두 출력되기 때문에 깔끔하지 않습니다.

그때 squash and merge를 사용합니다.
새로운 branch에 있던 commit을 연결해주는게 아니라
새로운 branch만 똑 떼와서 master 브랜치에 붙여주는 방법입니다.

사용방법

git switch master
git merge --squash 브랜치명
git commit -m '메시지'

와 같이 입력하면 끝입니다.
하나의 commit으로 master 브랜치에 생성해줍니다.


브랜치 삭제 방법

merge하고나면 자동으로 브랜치가 삭제되지 않아서
보통 직접 브랜치를 삭제합니다.

git branch -d 브랜치이름
git branch -D 브랜치이름

이 코드를 입력하면 삭제됩니다.

둘의 차이점으로는
병합이 완료된 브랜치 삭제시에는 -d 만 사용해도 되지만
병합하지 않은 브랜치 삭제시에는 -D 이것을 사용해야만 합니다.
"어떻게 merge 해야할 지 판단하기 힘듭니다."

profile
기죽지않기

0개의 댓글