대딩 기록(~22.01)/Git & Github 공부노트

[Git] 브랜치와 머지(merge)

문과 해달 2021. 7. 31. 01:14

1) 브랜치

그 동안은 master라는 하나의 브랜치 위에서만 커밋, 푸쉬 등을 진행했다.

하지만 분업을 하다보면 각 작업자들마다 각자의 흐름이 형성되며, 이를 하나의 공간에서 처리하기란 어려워진다.

이 때문에 git에서는 브랜치(branch)라는 개념을 두어 따로 버전 관리를 할 수 있게 하고,

이 중 확실한 부분만 master, 즉 메인 브랜치에 합치는 기능을 제공하고 있다.

git branch

 

작업 폴더에서 git bash를 연 다음, 위 명령어를 사용하면 현재 브랜치 목록을 확인할 수 있다.

브랜치 생성을 하지 않은 상태라면 master라는 브랜치명만 뜰 것이다

git branch (브랜치 이름)

위 명령어를 통해 새로운 브랜치를 생성할 수 있다.

 

이후 'git branch'

를 한 번 더 실행하면 생성한 브랜치명이 뜰 것이다. 

아마 master 앞에만 '*'가 있을 터인데, 이는 현재 속해있는 브랜치란 뜻이다.

 

git checkout (브랜치 이름)

브랜치 간을 이동할 수 있는 명령어이다.

 

2) 머지 (merge)

 

브랜치를 이동하고 그 위에서 작업할 수 있게 되었다. 하지만 특정 시점에서는 브랜치들의 내용이 합쳐져야 할 것이다.

브랜치 간의 병합을 머지(merge)라고 한다. 머지의 경우는 세 가지가 있다.

 

1. 병합 커밋 (Merge commit)

동일한 사람이 있다고 할 때,

모자를 쓴 상태의 브랜치에 신발을 신은 상태의 브랜치를 병합한다면 (합집합 연산과 같다)

모자를 쓰고 신발은 신은 상태의 새로운 커밋이 생기게 될 것이다. 이 커밋을 병합 커밋이라 한다.

 

2. 빨리 감기 (Fast-forward)

이번엔 아무 것도 착용하지 않은 상태의 브랜치에 모자를 쓴 상태의 브랜치를 병합한다고 생각해보자.

병합의 결과물이 원래의 모자쓴 브랜치와 동일하다. 따라 병합 커밋처럼 새로운 커밋을 생성할 필요없이

덮어쓰기를 해준다. 이가 Fast-forward 병합이다.

 

3. 충돌(Conflict)

이번엔 모자를 쓴 상태의 브랜치와 헬멧을 쓴 상태의 브랜치를 병합한다 가정하자.

모자와 헬멧은 동시에 착용할 수 없으니, git 입장에서는 이를 어떻게 처리할 지 모르게 된다.

이를 충돌이라 부른다.

 

머지의 방법은 다음과 같다.

원하는 브랜치로 'checkout'을 통해 이동한 후에,

git merge (브랜치명)

를 실행하면 두 브랜치를 병합할 수 있다.

 

하지만 앞서 말했듯 이 과정에서 충돌이 발생할 수 있고 특히 master 브랜치는 작업의 중심이 되는 브랜치기에

충돌 상태로 두어선 안된다. 이를 위해 사용할 수 있는 좀 더 안전한 방법이 풀 리퀘스트이다.

 

이에 대해 다음 포스트에 다루도록 하겠다.