:: git

git :: 깃 브랜치(branch) merge 하기 (+ local/remote/origin 이란?)

토람이 2021. 11. 24. 21:01

하나의 git repository 에 브랜치가 여러 개일 때,

한 브랜치에 반영된 사항을 다른 브랜치에도 적용해야 할 때가 있다.

 

예를 들어 개발 브랜치에 수정사항을 반영하고 정상 동작 확인 후

운영 브랜치(실제 운영 중인 코드 관리)에 해당 수정사항을 동일하게 반영할 때,

이 때 사용하는 방법이 'git merge' 이다.

 

1. 최소 2개 이상의 브랜치를 둔다.

기본적으로 repository 에 두 개 이상의 브랜치가 있어야 한다.

여기서는 development(개발 브랜치), master(운영 브랜치) 두 개를 만든다.

* 참고: development, master 브랜치 따로 따기 (https://toramko.tistory.com/15)

 

2. 한 쪽 브랜치에 수정사항을 반영한다.

development 브랜치에 수정 사항을 여러 번 commit, push 한다.

테스트를 통해 정상 동작이 검증된 버전이면 운영 브랜치에 merge 시킬 준비를 한다.

 

3. 다른 브랜치에 merge 시킨다.

master 브랜치에 development 브랜치의 변경사항이 update 되도록 merge 시킨다.

 

 

[git bash 를 이용하여 merge 하기]

(git bash 설치 > 파일 탐색기 > 프로젝트 폴더 > 마우스 우클릭 > 'Git Bash Here')

 

 

1) git checkout development

development 브랜치를 사용하도록 함

 

 

=> 이미 development 를 사용중인 것을 확인할 수 있다.

 

 

2) git merge {commit id}

현재 브랜치 버전을 {commit id} 버전으로 업데이트

 

보안상 commit id 는 모자이크^^;

 

이미 development 에서는 최신 commit id 가 반영되어 있는 것을 알 수 있다.

 

 

3) git checkout master

master 브랜치를 사용하도록 함

 

 

master 브랜치로 전환되었다.

현재 로컬 master 브랜치가 이 origin/master 와 똑같이 최신 형상임을 뜻한다.

(아래 쪽 설명 참고)

 

 

4) git merge development

development 브랜치의 내용을 master 브랜치로 merge 시킴

 

 

위 2)번의 git merge {commit id} 에서 commit id 대신 'development' 가 들어간 명령어 형태인데,

현재 development 브랜치의 최신 commit id 버전을 master 브랜치에도 적용시켜주겠다는 의미이다.

 

merge 직전의 master 브랜치와 비교하여 어떤 파일에 변화가 생겼는지 알 수 있다.

 

 

Q. 그럼 master 브랜치도 development 브랜치와 동일하게 업데이트 된 걸까?

A. 아직 아님!

git web 에 들어가서 master 브랜치를 확인해보니,

 

 

"This branch is 13 commits behind development" 라고 되어 있다.

아직 development 브랜치에 비해 열 세 번의 커밋만큼 뒤쳐져 있다는 뜻!

 

 

* git 에서 local, remote, origin 이라는 공간의 의미?

 

local development local master
remote development (origin/development) remote master (origin/master)

 

각각의 branch 는 로컬, remote 이렇게 두 개씩의 가상의 공간이 있다고 볼 수 있다.

내 컴퓨터로 작업하는 공간 => 로컬

git web 에 연동되는 공간 => origin 또는 remote (cloud) (내 컴퓨터 기준으로 멀리 있으니까 remote 라고 한듯^^;)

 

내 컴퓨터로 development 브랜치에 작업하여 commit 을 하면 local development 까지만 반영되고,

이 내용을 push 까지 하면 remote development 까지 반영된다.

 

위 4)번에서처럼

master 브랜치에서 merge development 를 하면 '로컬 master' 까지만 반영된다.

이를 remote master 까지 동일하게 반영하려면 git push 를 해주어야 한다.

 

 

 

5) git push origin master

로컬 master 에 있는 내용을 remote master 로 push

 

 

 

여기까지 모두 완료하고 git web 에서 다시 확인하면

 

 

"This branch is even with development"

즉, 이제 remote master 까지 모두 development 브랜치 형상과 같아졌다는 뜻이다.

 

git merge 완료! :D

 

 

[pycharm(intelliJ)를 이용하여 merge 하기]

pycharm(intelliJ) 를 이용하면 git 명령어를 외울 필요 없이 간단하다.

 

 

1) master 브랜치로 전환하기. (현재 develop 브랜치에 있음)

IDE 화면 맨오른쪽 하단 Git: develop 클릭

 

 

브랜치 목록 중에 master 브랜치 선택 후 'Checkout' 클릭

 

 

 

2) Master 브랜치 상태로 프로젝트 변경됨

 

 

3) Merge 하기

프로젝트 우클릭 > Git > Repository > Merge Changes

 

 

'remotes/origin/develop' 선택 후 Merge 클릭

 

 

 

4) Push 하기

프로젝트 우클릭 > Git > Repository > Push > push

 

 

변경사항 및 브랜치 확인 후 우측 하단 Push 클릭

 

 

 

 

요렇게 손쉽게 merge 완료! :)

 

300x250