fast-forward merges
- 깃 merge 중에서 가장 깔끔하고, 간단한 fast-forward merges
- master 브랜치에서 새로운 브랜치가 생성된 이후에, master 브랜치의 변동사항이 없다면 merge를 할 때, master 브랜치가 가리키고 있는 포인터를 새로운 브랜치가 가리키는 쪽으로 옮긴다.
- 그리고 새로운 브랜치를 삭제하면 깔끔하게 master 브랜치만 남는다.
단점
- 히스토리에 merge가 되었다는 사실이 남아있지 않게 된다.
- 그래서 merge한 사실을 히스토리에서 지우지 않고 싶은 팀은 merge commit을 따로 남긴다.
merge 히스토리로 보기
- 위의 히스토리를 그래프화 시키면 이 그림처럼 된다.
- master branch의 커밋이 d까지 있고, 새로운 브랜치들이 파생된 이후에는 master branch의 다른 커밋이 없다.
fast-forward-merges 방식으로 타 브랜치에서 master 브랜치로 merge하기
master 브랜치의 파일 확인하기
feature A 브랜치 파일 확인하기
- master 브랜치에는 1~4까지의 파일이 있다.
- feature-a 브랜치에는 5와 6 파일이 추가가 되어 있다.
merge하기
-
master 브랜치로 이동
-
merge 하기
-
확인해보기
- master 브랜치에는 feature-a 브랜치의 내용 e,f가 포함이 되어있다.
- merge가 완료되면 feature-a 브랜치는 필요없기 때문에 삭제한다.
- merge된 브랜치 삭제하기
- feature-a 브랜치가 삭제되고 master 브랜치가 f 커밋을 가리키고 있다.
- 이렇게 되면 feature-a라는 브랜치로 이동해서 master 브랜치로 병합을 했다 라는 증거는 안남는다.
fast-forward 방식을 하지 않고 merge하기
- 위의 그림 상태에서 만약 git merge feature C를 하게 되면 자동으로 fast-forward 식으로 merge를 해서 브랜치들 간의 merge 이력이 남지 않는다.
- 그렇다면?
- git merge --no-ff feature-c로 하게 되면 된다.
- 그렇다면 위의 그림처럼 commit 메시지를 입력하라고 vim 편집기가 켜지게 된다.
- 기본적인 커밋 메시지는 Merge branch 'feature-c' into master이다.
- 이것을 자신이 원하는 메시지로 고치면 된다.
- 이렇게 하면 merge commit이 따로 형성이 되면서 위의 그림같은 구조를 취하게 된다.
- 그리고 feature-c 브랜치를 삭제하게 되면 위의 히스토리에서 보이는 것처럼 커밋 메시지를 통해 타 브랜치에서 merge가 되었구나를 볼 수 있다.
fast-forward 방식이 불가능할 때 merge하고 싶다면?
- 위의 그림처럼 master 브랜치에서 파생된 feature a 브랜치 이후의 master branch에서 새로운 커밋 내역이 있을 때에는 fast-forward 방식이 불가능하다.
- 그래서 master 브랜치와 파생된 feature A 브랜치의 변동사항을 모두 합해서 merge commit을 만든 후, master 브랜치에 commit을 해야함
- git merge 브랜치명
- 위 명령어는 기본적으로 fast-forward 방식이다.
- 위의 그래프 같이 fast-forward가 되지 않는 상황이라면, 저 명령어를 입력했을때, commit message를 입력하라는 vim 창이 뜨게 된다.
- commit을 작성하게 되면 위의 그림처럼 전부 master 브랜치로 병합이 된 것을 확인할 수 있다.