머지의 기능이 머지?

최동혁·2022년 12월 17일
0

깃허브

목록 보기
9/9

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하기

  1. master 브랜치로 이동

    • git checkout master
  2. merge 하기

    • git merge feature-a
  3. 확인해보기

  • master 브랜치에는 feature-a 브랜치의 내용 e,f가 포함이 되어있다.
  • merge가 완료되면 feature-a 브랜치는 필요없기 때문에 삭제한다.
  1. merge된 브랜치 삭제하기
    • git branch -d feature-a


  • 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 브랜치로 병합이 된 것을 확인할 수 있다.
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글