하나의 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} 버전으로 업데이트
이미 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 완료! :)
':: git' 카테고리의 다른 글
git :: 깃(git) reset, 푸시했던 내용 없애기 (0) | 2021.11.30 |
---|---|
git :: 깃 브랜치 생성하여 개발용/운영용 형상 관리하기 (development, master 브랜치) (0) | 2021.11.23 |