1. 3-way merge
- 한줄 설명 : 기본적으로 우리가 알고있는 merge의 형태이다.
main branch에 commit들이 쌓여있고,
sub branch에 commit이 쌓인 상태에서
sub branch의 내용을 main branch에 합치고 싶을 때 사용한다
그림으로 설명하면 아래와 같다

3-way merge 설명
그림이 좀 끔찍해 보일 수 있는데,,
빨간색이 - main
검정색이 - sub branch라고 각각 규정하고 보자.
sub branch의 내용을 main branch에 merge하면
새로운 commit이 main branch에 생성되면서 (우리가 아는 커밋메시지가 merge어쩌구..로 시작하는..) merge가 진행된다.
이를 3-way merge라고 한다.
git 명령어는 아래와 같다
|
git switch main(<-내가 merge를 하려는 브랜치에 접속(?))
git merge sub (<-내가 합치려는 브랜치 명)
끝 (commit이 main branch에 한개 생김 / sub branch는 그대로)
이렇게 하면 기존 sub 브랜치가 남아있는데, 보통 merge를 하고 나면 일일히 지워준다.
branch 삭제 명령어는
git branch -d 브랜치이름 => 병합이 완료된 브랜치 삭제 시
git branch -D 브랜치이름 => 병합하지 않은 브랜치 삭제 시
그리고 만약 이렇게 merge 하고 confilct가 나면, vscode 상에서 뭐 선택할지 물어보고
남기고 싶은 코드로 수정한다음 add/commit하면 해당 내용으로 merge되어 commit된다.
|
2. fast-forward merge
- 한줄 설명 : 내가 main 할게~
main branch에서 sub branch를 파고 나서,
sub branch 에서 작업 후 합치려고 하니까 main branch에 더 반영된게 없는 경우에 (= 기준이 되는 브랜치에 신규 commit이 없으면)
merge를 하게 된다면 fast-forward merge가 실행됐다고 볼 수 있다.

상단 이미지에서 sub branch가 main branch가 되는 것이다.
git 명령어는 아래와 같다
|
git switch main(<-내가 merge를 하려는 브랜치에 접속(?))
git merge sub (<-내가 합치려는 브랜치 명)
끝 (commit이 main branch에 한개 생김 / sub branch는 그대로)
기존에 상단의 3-way merge와 방법은 동일하다.
이게 싫다면 git merge --no-ff 브랜치명 이라는 명령어를 통해 3-way merge를 진행할 수 있다.
|
3. rebase and merge
- 한줄 설명 : 브랜치의 시작점을 예쁘게
main branch에서 sub branch를 따온 다음,
sub branch에서 작업한 후에
main branch에서 sub branch를 따온 뒤에 commit 된 내용을
sub branch로 가지고 와서(rebase)
merge 하는 작업을 rebase and merge 라고 한다.
해당 작업은 sub branch의 시작점을 main branch로 옮겨준 후
fast-forward merge하는 것이다.
이런 작업은 3-way merge 말고 강제로 fast-forward 하고 싶을때 쓴다

git 명령어는 다음과 같다
|
git switch 새로운브랜치
git rebase main
git switch main
git merge 새로운브랜치
근데 얘는 브랜치 간의 차이가 많은 경우 rebase할때 충돌이 많이 발생할 수 있다.
|
4. squash and merge
- 한줄 설명 : 브랜치의 시작점을 예쁘게
한줄설명이 rebase랑 같다
둘다 merge를 할때 붙이려는 브랜치를 똑 떼서 main에 붙인다는 개념은 동일하다.
근데 이제
rebase and merge는 내가 sub branch에서 commit을 3번 했으면 main branch에 merge했을때 그 3번 commit한게 git log에 남는다.
squash and merge는 내가 sub branch에서 여러번 commit을 해도 main branch에 merge했을때 1번 commit한것으로 git log에 남는다.
git 명령어
|
git switch main
git merge --squash 브랜치명
git commit -m '메세지'
|
내 생각엔 그래서..
쉽게 오류도 적을 것 같고 수정한게 적으면 squash
많이 수정했고 작업 내용이 꽤 많아서 문제가 생길 수 있다면 rebase가 좋지않을까?하는..
뭐가 맞는지는 아직 잘 모르겠다.
'일상' 카테고리의 다른 글
| 디스코드 음악 봇 만들어서 라이트세일 서버에 올려보자 (3) | 2024.06.13 |
|---|---|
| 나는 왜 JAVA를 싫어했을까? (2) | 2024.03.29 |