본문 바로가기
DevOps/Git

[git 이해하기2] Git Branch, Merge

by 태옹 2021. 7. 7.

Branch : 특정 커밋을 가리키는 포인터

◾ 서로 다른 개발 흐름을 병렬적으로 사용하기 위함

◾ 기능1과 기능2를 나누어서 개발하다가(분기를 나누는 경우) 하나를 합치는 경우가 있기 때문에 브랜치를 사용함

 

master : 처음 프로젝트를 만들었을 때 기본적으로 지정되어있는 브랜치

◾ 일반적으로는 개발이 완벽한 경우 master브랜치에 push해줌

 

◾ Head -> master : Head는 브랜치를 통해서 특정 커밋을 가리킴

 

 

브랜치 생성하기

git branch 생성할브랜치이름

 

하나의 프로젝트에서 여러 기능을 개발하는 경우 분기가 나뉘는 시점이 발생한다. 그 경우에는 master브랜치 하나만 사용하게 되면 굉장히 비효율적이고 버전관리가 어려울 수 있다. 그래서 각각의 브랜치를 만들어서 개발을 진행한 뒤 마무리 시에 합쳐서 master에 전달하는 방식을 일반적으로 사용한다.

=> 개발할 때는 다른 브랜치에 HEAD를 놓고 개발하다가 완성된 상태인 것을 확인한 경우에 master브랜치로 HEAD를 옮겨서 push해줌

 

 

다른 브랜치 가리키게 하는 명령어

git checkout 가리키고싶은브랜치이름

 

각자 다른 기능을 맡아서 개발을 진행하는 경우 A팀에서 개발하는 기능은 A팀의 브랜치에서 작업하고 있기 때문에 B팀은 git log명령어로 A브랜치 커밋 내역을 확인할 수 없다. 이 때 아래의 명령어로 다른 브랜치의 커밋 내역을 확인할 수 있다.

 

현재 존재하는 모든 브랜치의 내역을 확인하는 명령어

git log --all --graph

◾ --all : HEAD가 가리키는 Branch뿐만 아니라, 모든 Branch를 확인

◾ --graph : Branch와 Commit의 관계를 그래프 형식으로 나타냄

 

 

다른 브랜치의 최신 커밋내역을 반영하기(합치기)

git merge 다른브랜치이름

다음 명령어를 사용하면 현재 HEAD가 브랜치를 통해 가리키고 있는 커밋merge 뒤에 쓴 브랜치가 가리키고 있는 커밋을 합쳐주는 작업을 함

 

그러나 모든 상황이 다 같은 방식으로 적용되는 것이 아니다. merge를 하게 되는 경우에 두 상황으로 나눠서 설명할 수 있다. Fast-forward Merge 방식과, 새로 커밋하는 방식이다.

👇 아래는 이 부분에 대해 좀 더 자세히 설명한 포스팅이니 참고하쟈

https://backlog.com/git-tutorial/kr/stepup/stepup1_4.html

 

누구나 쉽게 이해할 수 있는 Git 입문~버전 관리를 완벽하게 이용해보자~ | Backlog

누구나 쉽게 알 수 있는 Git에 입문하신 것을 환영합니다. Git을 사용해 버전 관리를 할 수 있도록 함께 공부해봅시다!

backlog.com

 

Fast-forward Merge

master에서 feature-A브랜치를 생성해서 개발하는 경우 feature-A는 master의 최신 커밋 내용을 반영하고 있기 때문에 master와 feature-A를 merge해도 conflict가 발생하지 않음. 그대로 master브랜치가 타겟브랜치인 feature-A로 이동만 함. 이것을 Fast-forward Merge라고 함.

 

새로운 커밋 발생

그러나 feature-A와 feature-B처럼 여러 분기로 나뉘는 경우에는 A브랜치가 B브랜치의 최신 커밋 내용을 가지고 있지 않을 수 있음. 그런 경우에 feature-A와 feature-B가 서로 merge를 시도하게 되면 conflict가 발생함.

 

conflict가 발생한 경우 충돌이 난 부분을 수정해서 다시 아래 작업을 진행

git add . 
git commit -m "메시지"

 

conflict가 발생한 부분을 수정하여 merge를 성공하게 된 경우 log를 확인해보면 새로운 커밋이 발생한 것을 알 수 있음.

 


 

git이해하기1에서 등장한 아래 명령어는

git push -u origin master

◾ master branch를 origin이라고 부르는 외부저장소 서버의 프로젝트로 올려달라는 의미

◾ -u : (--ser -upstream) 내 컴퓨터의 master 브랜치가 깃랩 서버의 master브랜치를 바라보게 함

 

이 명령어를 이해하면 아래의 명령어 원리도 유추할 수 있다.

 

외부저장소에 브랜치 등록하기

git push -u origin 등록할브랜치이름

◾ 현재 push하려고하는 브랜치의 최신 커밋과 그 이전의 신규 커밋들이 외부 저장소에 업로드 됨

 

댓글