본문 바로가기
Dev/Git

[GitHub] 5. 브랜치 생성, 삭제, 병합하는 법 (branch, merge)

by YummYum 2023. 8. 23.

하나의 프로젝트를 기반으로 어떤 개발자는 새로운 기능을 개발하고, 어떤 개발자는 운영에 버그를 수정할 수 있습니다. 동일한 프로젝트를 기반으로 서로 다른 버전의 코드를 만들어 낼 수 있는데 이를 가능하게 하는 것이 바로 브랜치입니다. 즉, 브랜치는 프로젝트 기준 브랜치로부터 독립적인 작업 공간을 만들어 주는 기능입니다.

 

 

1. 브랜치 생성

먼저 지역저장소에서 새로운 브랜치를 생성하겠습니다. 기준이 되는 브랜치로 이동하고, 해당 브랜치로부터 새로운 브랜치를 생성해야 합니다. 먼저 기준이 되는 브랜치로 이동할 때는 git checkout 명령어를 실행해 작업 브랜치를 master 브랜치로 변경합니다. 

git checkout master

 

git branch 명령어를 이용해 master 브랜치로 이동했는지 확인합니다. (* 표시는 현재 작업 중인 브랜치를 의미합니다.) 

git branch

 

그다음 새로운 브랜치를 생성합니다.

git branch <새로운 브랜치명>

git branch develop/git-study-local

 

새로운 브랜치를 작업 브랜치로 변경하고 지역저장소에서 생성한 새로운 브랜치를 원격저장소에 반영합니다.

git checkout develop/git-study-local
git push origin develop/git-study-local

 

git branch 명령어를 이용해 제대로 반영했는지 확인합니다. ( -a 옵션은 지역저장소와 원격저장소의 브랜치 정보를 함께 보여줍니다. remotes는 원격저장소를 의미하고 origin은 원격저장소의 식별자를 의미합니다.)

 

** 다른 원격저장소로 가서 원격 저장소의 상태를 갱신하려면 git remote 명령어를 실행하면 됩니다.

 


2. 브랜치 삭제

지역저장소의 브랜치를 삭제합니다. 

git branch -d <브랜치명>

그다음 원격저장소의 브랜치를 삭제합니다.

git push origin -d <브랜치명>

 


 

3. 브랜치 병합

기준 브랜치에서 새로운 작업 브랜치를 생성했습니다. 작업이 완료된다면 기준 브랜치에 반영해야 합니다. 이때 이 작업을 브랜치 병합이라고 합니다. 이때 병합(merge) 작업은 두 브랜치를 비교하여 파일의 내용을 비교하여 합치는 작업을 말합니다.

 

3-1) 패스트 포워드 병합 : master 브랜치 기준으로 작업 브랜치를 생성한 후 작업이 완료되면 master 브랜치에 병합을 합니다. 이때 master 브랜치에 새로운 commit이 없다면 패스트 포워드 병합이 진행됩니다.

git checkout master
git merge new-branch

 

3-2) 병합 커밋 생성 : 패스트 포워드 병합과 달리 기준 브랜치에 변경이 존재하는 경우, 기준 브랜치와 새로운 작업 브랜치에 변경 내용을 하나로 합치는 작업이 필요합니다. git merge 명령어를 실행하면 Auto-merging이 일어나 양쪽의 변경 내용을 하나로 합니다. 

 

하지만 두 명 이상이 각자의 작업 브랜치에서 동일한 코드를 수정할 경우 병합할 때 충돌이 발생합니다. 이미지와 같이 충돌이 난다면 최종적으로 반영할 내용만 남겨두고 commit을 생성하고 원격저장소에 반영합니다.

git add .
git commit -m "resolve conflict"
git push origin master

 

** 병합 과정에서 중단하고 싶다면 git merge --abort 명령어를 실행합니다.

 

** merge 과정에서 기준이 되는 master 브랜치에서 merge를 하기보다 각자 작업 브랜치에서 merge한 후 master로 checkout한 후 merge하는 것도 좋은 방법입니다. (다 같이 함께 쓰는 master가 아닌 내가 작업하고 있는 브랜치에서 merge를 해 충돌을 해결한 후 병합할 수 있기 때문입니다.)

 

** 바로 직전에 merge를 취소하는 방법으로는 git reset --merge HEAD~1 명령어를 실행합니다. 다른 방법으로는 git reflog 명령어를 실행하여 hash를 확인한 다음 git reset --merge [hash]을 실행합니다.

댓글