728x90
🖥️ git merge 종류
git merge의 종류는 4가지가 있다.
- 보통의 병합(--ff)
- 이기적 병합(--no-ff)
- 소심한 병합(--ff-only)
- 양아치 병합(--squash)
⌨️ 보통의 병합
$ git merge {병합할 브랜치 명}
기본적인 merge 방법이다. git merge 옵션을 적지 않으면 --ff와 같은 뜻이다.
- 브랜치와 병합할 브랜치가 Fast-Forward 관계 o : 병합할 브랜치(커밋)을 따라감. without Merge 커밋
- 브랜치와 병합할 브랜치가 Fast-Forward 관계 x : 병합할 브랜치와 병합됨. with Merge 커밋
아래는 git merge {브랜치명} --ff 할 경우 log이다.
master > git merge Hotfix --ff
Updating a7ee0c1..03c0e57
Fast-forward
master > git log
* 03c0e57 (HEAD -> master, Hotfix) fix bugB
* 1693ca1 fix bugA
* a7ee0c1 (origin/master) base commit
⌨️ 이기적인 병합
$ git merge --no-ff {병합할 브랜치 명}
현재 브랜치와 병합 대상의 관계가 Fast-Forward이던 아니던 무조건 Merge 커밋과 같이 병합되는 옵션
master > git merge Hotfix --no-ff // merge내용 작성
Merge made by the 'recursive' strategy.
master > git log
* 842db67 (HEAD -> master) Merge branch 'Hotfix'
|\
| * 03c0e57 (Hotfix) fix bugB
| * 1693ca1 fix bugA
|/
* a7ee0c1 (origin/master) base commit
이 때, 만들어진 commit(Merge branch 'Hotfix')는 2개의 Parent(Hotfix, master를 갖는다.
📌 --ff가 적용이 안되고 --no-ff로 적용되는 경우
--ff로 옵션을 주어도 --no-ff로 적용이 되는 경우가 있다. 그 경우를 살펴보자
hotfix가 작업을 하는동안 master에 변경 내역이 있는경우
- master 작업 추가
master > vi testC.txt master !1 > git add . master +1 > git commit -m "testC.txt" master > git log * | 00c9de9 (HEAD -> master) testC.txt | * 03c0e57 (Hotfix) fix bugB | * 1693ca1 fix bugA |/ * a7ee0c1 (origin/master) base commit
- merge
master > git merge Hotfix --ff // Merge branch 'Hotfix' master > git log * 1925dd0 (HEAD -> master) Merge branch 'Hotfix' |\ * | 00c9de9 testC.txt | * 03c0e57 (Hotfix) fix bugB | * 1693ca1 fix bugA |/ * a7ee0c1 (origin/master) base commit
⌨️ 소심한 병합
$ git merge --ff-only {병합할 브랜치 명}
현재 브랜치와 병합 대상의 관계가 Fast-Forward인 경우에만 병합 진행, Merge 커밋이 생성되지 않음
⌨️ 양아치 병합
$ git merge --squash {병합할 브랜치 명}
현재 브랜치와 병합 대상과의 차이나는 commit을 하나로 합쳐서 커밋'
master > git merge --squash Hotfix
Updating a7ee0c1..03c0e57
Fast-forward
Squash commit -- not updating HEAD
testA.txt | 2 +-
testB.txt | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
// squash는 commit이 생성되지않고 Staged상태만 된다
// commit 추가
master +2 > git add .
master +2 > git commit -m "fix bugA,B"
[master 48975f6] fix bugA,B
2 files changed, 2 insertions(+), 2 deletions(-)
master > git log
* 48975f6 (HEAD -> master) fix bugA,B
| * 03c0e57 (Hotfix) fix bugB
| * 1693ca1 fix bugA
|/
* a7ee0c1 (origin/master) base commit
728x90
'👨💻 Git' 카테고리의 다른 글
깃 커밋 메시지 (1) | 2024.02.21 |
---|---|
Git Branch Strategy(깃 브랜치 전략) (0) | 2024.02.20 |