[git] 다양한 merge 방법

홍싸리·2023년 7월 18일
0

git

목록 보기
1/2

참조 애플코딩: (무료) 매우쉽게 알려주는 git & github

(1) 3-way merge

브랜치에 각각 신규 commit1회 이상 있는 경우, merge 명령을 내리면 두 브랜치의 코드를 합쳐서 새로운 commit을 자동으로 생성해주는 것

이것이 merge의 기본 동작방식

commit2 시점에서 commit2-1이라는 신규 브랜치를 만들고
그 이후 각각 commit3, commit2-2라는 신규 커밋이 1회 이상 생겼을 때 merge를 해주는 것이 3-way-merge이다.

(2) fast-forward merge

새로운 브랜치에만 commit이 되어있고
기준이 되는 브랜치에는 신규 commit이 없는 경우가 있는데,

이럴 경우 merge하게 되면
"fast-forward merge 되었습니다" 라고 알려줌

기준이 되는 브랜치에 새롭게 합칠 것이 없어서 분리된 브랜치를 메인 브랜치처럼 다루는 것

만약, fast-forward merge가 싫다면

git merge --no-ff 브랜치명

를 사용하여 강제로 3-way merge할 수도 있음

(3) 브랜치 삭제 방법

위의 두 가지 방법으로 merge를 하더라도 브랜치가 자동으로 삭제되진 않는다

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

둘 중 하나를 사용하면 필요없는 브랜치를 삭제할 수 있다
병합이 완료된 브랜치를 삭제할 땐 -d만 사용해도 되는데
병합하지 않은 브랜치를 삭제할 땐 -D를 사용해야 한다.

(4) rebase and merge

rebase


rebase는 브랜치의 시작점을 다른 commit으로 옮겨주는 행위다

  1. rebase를 이용하여 신규 브랜치의 시작점을 main 브랜치 최근 commit으로 옮긴 다음
  2. fast-forward merge를 하는 것
  1. 3-way merge 말고 강제로 fast-forward 하고 싶을 때
  2. 브랜치 없이도 코드를 잘 짜는 고수 느낌을 주고 싶을 때
    rebase & merge를 사용한다

rebase and merge 하는 법

  1. 새로운 브랜치로 이동
  2. git rebase main
  3. 브랜치가 main 브랜치 끝으로 이동하는데 그걸 fast-forward merge 하면 됨
git switch 새로운브랜치
git rebase main
  
git switch main
git merge 새로운브랜치

main 브랜치 뿐만 아니라 다른 브랜치끼리도 가능함

단, 브랜치끼리 차이가 너무 많은 경우에 rebase를 하게 되면 충돌이 많이 발생할 수 있음

(5) squash and merge

모든 브랜치를 3-way merge해버리면 이후에 문제가 생길 수도 있음

  1. 3-way merge 된 것들은 그래프상 복잡해보이고
  2. main 브랜치 git log를 출력해보면 3-way merge된 브랜치들의 commit 내역도 다 출력되어서 더러워지는 현상이 있기 때문

그게 싫을 경우,
rebase 또는 squash and merge하면 됨

위와 같이 사용하면 새로운 브랜치에 있던 commit들을 연결해주는 것이 아니라 똑 떼와서 main 브랜치에 붙여주기 때문에
1번과 2번 걱정을 하지 않아도 됨

squash

squash and merge를 하게 될 경우,
3-way merge처럼 선으로 이어주지 않고
새 브랜치에 있던 코드변경사항들이 main 브랜치로 순간이동함

main 브랜치의 git log를 출력해볼 때
merge 완료된 브랜치의 commit 같은 것들은 출력되지 않음 (훨씬 깔끔)

git switch main
git merge --squash 브랜치명
git commit -m '메세지'

git merge 뒤에 --squash 옵션 추가하면 됨

▲ 그냥 merge 했을 경우

▲ merge --squash 했을 경우

profile
그럴싸한건 다 따라해보는 프론트엔드 개발자 준비중인 6년차 퍼블리셔

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

정말 좋은 정보 감사합니다!

답글 달기