끄적끄적 아무기록

Conflict (충돌) 없이 Git Merge 하기

by 현생사는갓생지망생
반응형

Git을 활용할 때 가장 어렵게 느껴졌던 개념이 Merge 였다

Git Merge에 대해 이해를 하기 위해서는 Git의 Local과 Remote(Origin)의 변경점에 대한 이해가 필요하다

Git Merge란?
Git Branch를 다른 Branch로 합치는 과정

 

👉🏻 Git Graph 활용

Visual Studio IDE를 사용한다면 내장되어 있는 Git 기능 사용이 가능하다

그중 변경점 (Commit) 이력을 확인하기 위한 기능이 Git Graph 이다

Extensions에서 검색하여 설치할 수 있다

VSCode에서 Git Graph 확장 프로그램 설치

 

👉🏻 Git Conflict

Git Merge 또는 Rebase 과정 중 동시에 같은 파일의 같은 부분을 수정하거나, 다른 사람의 변경 사항을 병합하려고 하는 경우 충돌이 발생할 수 있다

그런 경우 Auto Merge가 불가능하기 때문에 충돌을 해결 후 Merge를 해줘야 한다

충돌을 해결하고 Merge 해줘도 되지만, 다른 사람이 Commit 한 내역이 변경되어 Remote 저장소에 영향을 줄 위험성이 있다

따라서 충돌을 최소화하여 Merge 해야 한다!

 

❓How to❓

✏️ Scenario "dev" Branch에 "feat/ci" Branch Merge

 

Git 형상을 Local로 가져와서 수정을 했다고 가정하자

Local에서 feat/ci 브랜치를 수정하는 동안 혹은 다른 작업을 하는 동안 다른 팀원들도 각자 브랜치를 생성하여 dev에 Merge를 할 수도 있고, dev에 직접 Push를 할 수도 있다

이때, 바로 Local에서 수정한 feat/ci를 Remote의 dev로 Merge 하면 충돌이 발생할 가능성이 있다

왜냐? 내가 Local로 가져온 시점의 feat/ci 브랜치는 내가 수정하는 동안 Remote의 dev 브랜치에 어떠한 변경점들이 발생했는지 모른다

이를 방지하기 위해 현재 내 Local에서 아래와 같은 순서대로 작업을 해준다

git checkout dev
git pull

Remote의 dev 브랜치의 변경점들을 Local의 dev 브랜치로 가져온다. 이렇게 하면 현재 내 Local에서도 Remote의 dev 브랜치에 발생한 변경점들을 알게 된다

git checkout feat/ci
git merge dev

Local의 dev 브랜치를 feat/ci로 Merge 한다. 이러면 Local의 feat/ci도 Remote의 dev 브랜치에 발생한 변경점들을 모두 알게 된다.

Git Graph로 변경점 확인

이 과정들을 수행하면 위와 같이 Git Graph를 확인할 수 있다

Local에서 feat/ci를 수정하는 동안 발생한 Remote dev의 변경점을 Local로 가져오고, 해당 변경점을 Local의 feat/ci는 모르기 때문에 Local에서 Merge를 먼저 수행한다

그러면 위와 같이 Local에서 feat/ci와 dev 브랜치가 병합되고

현재 상태에서 feat/ci 브랜치에서 Commit, Push 한 내역을 Remote의 dev에 Merge 하면 된다!

 

👉🏻 Merge 방법

git merge <병합할 Branch>

또는 GitLab GUI에서 Merge 요청도 가능하다

GitLab GUI로 Merge Request

위와 같이 Merge Request가 생성되면 팀원들이 확인 후 승인이 가능하다

 

Git을 활용하기 위해서는 변경점에 대한 이해, Local과 Remote 저장소에 대한 이해가 명확해야 한다💪🏻

 

✍🏻 참고

Git Merge https://velog.io/@marksen/Git-Branch%EC%99%80-Merge

반응형

블로그의 정보

현생이네

현생사는갓생지망생

활동하기