![](https://velog.velcdn.com/images/eunbeann/post/c5e01e9a-3de0-4bdc-a684-567c5a99ac41/image.png)
Branch ⛓
- 동일한 소스코드에서 다른 작업을 동시다발적으로 할 수 있게 해주는 기능
- 각자 독립적인 작업 영역 안에서 자유롭게 코드 변경 가능
- 분리된 작업 영역에서 변경된 내용을
추후 Merge를 통해서 통합된 새 버전으로 만들어 낼 수 있음.
HEAD
- 현재 사용 중인 브랜치의 선두 부분을 나타내는 이름
- HEAD를 이동하면 사용하는 브랜치가 변경된다.
Merge ⛓
- 기본 단위는
branch
- 서로 다른 브랜치를 하나의 브랜치로 합치는 과정
⇒ 독립적인 개발 라인을 단일 라인으로 통합할 수 있음!
🌱 fast-forward merge
브랜치 포인터가 Merge 과정 없이 그저 최신 커밋으로 이동하는 방식
![](https://velog.velcdn.com/images/eunbeann/post/3b5e736a-644a-4f0b-9c07-0660f3586e4b/image.png)
🤔 Fast Forward 관계?
- 기존 브랜치와 분기한 브랜치의 관계
- 분기한 브랜치의 커밋 히스토리가
기존 브랜치의 커밋 히스토리를 포함하고 있을 때
Fast Forward 관계를 가짐
🤔 언제 쓰이지 ?
- 서로 다른 브랜치의 base 커밋에 내용이 변경되지 않았을 때 사용 됨.
[EX]
기존 master
브랜치 에서 새로운 브랜치 feature
하나를 생성 한 후에 master
에서는 더 이상 커밋하지 않고, Feature
에서만 커밋하는 경우에 Fast-forward 방식으로 머지된다.
- 이 경우에는 Merge 커밋이 따로 만들어지지 않고 HEAD의 위치만 이동한다.
🤔 어떻게 쓰지?
git merge {병합할 브랜치명}
💡 non fast-forward 병합
git merge --no -ff {브랜치명}
- merge 대상과 fast-forward 관계여도 강제로 merge 커밋을 생성하고 병합.
- 브랜치에 관계 없이 필요한 커밋만 가지고 올 수 있게 됨.
- 어떤 브랜치에서 merge했는지 기록을 남길 수 있음.
⇒ 협업 과정에서는 기록을 남기는 것이 필요해 이 방식이 권장된다 👍
🌱 3-way-merge
각 브랜치에 새 커밋이 하나 이상 있는 경우
Merge 했을 때 두 브랜치의 코드를 합쳐서 새로운 커밋을 자동 생성해주는 것
![](https://velog.velcdn.com/images/eunbeann/post/9d164de2-1220-4de5-b823-793ceca6bdcf/image.png)
🤔 3-way-merge 방식?
- 서로 다른 브랜치에 공통되는 base 브랜치를 기점으로 충돌을 최소화 시키는 방법
- 결과를 별도의 커밋으로 만들고 해당 브랜치가 그 커밋을 가리키도록 이동한다.
- 브랜치간 병합을 진행할 때, base를 기준으로
어떠한 브랜치 파일이 수정되었는지 확인할 수 있어 충돌 문제 해결
에 효과적임.
🤔 언제 쓰이지 ?
- 두 브랜치에서 새 커밋이 생겼을 때 쓰임
- 기존 Fast Forward 방식으로는 백트래킹 없이 다른 브랜치로 이동하는 것이 어려워
3-way-merge 방식이 사용된다.
🤔 어떻게 쓰지?
git merge {병합할 브랜치명}
참고자료 ⛓