기능
- 다른 로컬 브랜치의 커밋을 현재 브랜치로 가져온다.
특징
- 원격 브랜치를 대상으로 할 경우,
git pull origin {브랜치}
와는 달리 git fetch
를 먼저 수행해야 한다.
- Fast-Forward(커밋이 같은 부모 커밋으로부터 한 줄로 연속적으로 이어지는 경우)가 가능하면 병합 커밋이 생성되지 않는다.
옵션
--no-ff # 병합 커밋을 반드시 생성 (브랜치간 히스토리를 명확히 유지할 때 사용)
--ff-only # 병합 커밋을 생성하지 않고 Fast-Forward 병합만 허용 (불가능할 경우 중단 후 오류 출력)
--squash # 변경사항(커밋)들을 가져와서 커밋을 모두 풀어버리고 스테이징 영역에 삽입 (이후 commit을 통해 하나의 커밋으로 생성 가능)
--log # 병합 시 커밋 메시지에 병합된 브랜치의 커밋 메시지 추가(Gitlab의 Merge Request의 기본 동작과 동일)
--no-commit # (FF일 때는 해당되지 않음) 병합할 커밋들을 일단 가져온 뒤, 병합 중단 상태로 머무른다. git status, diff 등으로 상태를 확인하고 commit하거나 merge --abort 할 수 있다.
--edit # (기본값) 병합 시 커밋 메시지를 수정할 수 있도록 편집기 열기
--abort # 병합 중 충돌 발생 시 중단하고 이전 상태로 복귀
예제
git merge dev # 로컬 dev 브랜치로부터 커밋 병합
git merge origin/dev # 원격 dev 브랜치로부터 커밋 병합
git merge origin/dev~1 # 원격 dev 브랜치의 마지막 이전 커밋까지 병합
git merge {커밋해시} # 지정한 커밋 해시까지의 커밋 병합
git pull과의 차별점
git pull origin dev~1
은 불가능하지만, git fetch && git merge origin/dev~1
은 가능하다.
- 즉, 특정 지점의 커밋까지만 병합이 가능하다.
- 물론 git pull을 한 뒤
reset --hard HEAD~1
로 돌아가버리면 되는 문제이긴 하다.