개발/기타

[Git] fast-forward merge vs non-fast-forward merge

고등어찌짐 2022. 8. 8. 21:42

 오늘 기능 개발을 마무리하면서 개발했던 브랜치를 master 브랜치에 merge 해야했다. GUI 만 사용하다가 명령어로 merge 했다. 

 

git merge branch_name

 

 다행히 app 별로 잘 나누어져있어서 아무 이슈 발생없이 브랜치가 잘 merge 되었는데, 내가 생각했던거랑 그래프 모양이 달라서 당황했다. 내 브랜치가 master 브랜치에 아예 합체되어 버렸다...ㅎ

 

fast-forward merge 후 그래프

 

 아마 내가 브랜치를 따서 개발한 이후에 master 브랜치에서 아무런 변경 이력이 없었기때문에 그런것 같다. 그런데 난 아래 그림처럼 merge 하고 싶었는데, 왜인지 크라켄으로 merge 를 하면 이전의 브랜치 이력이 남아 있어 이게 당연한줄로만 알고있었다,,,  이런 상황 빨리감기 merge 를 하지 않고 아래와 같이 이력을 남기고 싶으면 커맨드로 merge 할 때 다음과 같이 옵션을 붙여주면 된다. 

 

non-fast-forward merge 후 그래프

git merge --no-ff branch_name

 위 그림처럼 non-fast-forward merge 는 지금까지 개발한 commit 들의 기록을 모두 남겨두고 추적관리할 수 있기때문에 development branch 의 경우에 많이 사용한다. 반면 staging ( production 전까지 유사한 환경에서 테스트 ) branch, production branch 에서는 development branch 처럼 현란한 (?) 수정 이력들을 모두 추적관리하거나 가지고 있는것이 더 불편할 수 있다. 그렇기때문에 fast-forward merge 로 1개의 commit 으로 모두 합쳐 정확한 이력만을 남길 때 사용한다. 

 

 

 

#참조

https://backlog.com/git-tutorial/kr/stepup/stepup1_4.html

https://stackoverflow.com/questions/6701292/git-fast-forward-vs-no-fast-forward-merge