병합(merge)

3-ways merge

master 브랜치로부터 분기된 feature/1 브랜치가 있다고 하자. master 브랜치에서는 stuff 라는 파일이 만들어져 aad6aa6 커밋까지 진행되었고 feature/1 브랜치에서는 stuff2라는 파일을 만들어 4a21cdc 커밋이 진행되었다. stuff 파일은 수정되지 않은 상태다.

두 브랜치가 각각 커밋을 진행했고 서로 겹치게 수정한 파일은 없다고 하자. feature/1에서 진행된 사항들을 master 브랜치로 가져오고 싶다면 다음과 같이 한다.

$ git checkout master
$ git merge feature/1

이처럼 서로 다른 두 커밋을 가진 브랜치가 하나로 병합하는 과정에서 두 브랜치가 양쪽의 이력을 그대로 보존하고자 병합 커밋을 만들면서 병합되는 것을 3-ways merge라고 한다.

Fast-forward merge

feature/1 브랜치에서 두번의 커밋이 있다고 가정하자. 그리고 master 브랜치에서는 커밋이 진행되지 않았다.
즉, 한쪽에서만 변경이 일어난 것이다.

그리고 다음과 같이 feature/1 브랜치의 변경 사항들을 master 브랜치로 병합하자.

$ git checkout master
$ git merge feature/1
Updating 65c8b16..6445bb5
Fast-forward
  stuff | 1 +
  stuff | 1 +
  2 files changed, 2 insertions(+)

위와 같이 feature/1 브랜치에서만 변경사항이 발생했고 이를 master 브랜치로 병합하자 Fast-forward merge가 발생했다. 즉, 한쪽 브랜치에서만 일어난 변경사항을 다른 브랜치로 병합하는 방식이다.

이때 --no-ff 플래그를 전달해 3-ways 병합처럼 만들 수 있다. 이는 병합하는 브랜치의 이력을 의도적으로 남기려고 사용한다.

results matching ""

    No results matching ""