[Git]깃 브랜치 컨플릭트 해결하는 A to Z 방법

이은진·2020년 12월 21일
6

1차 프로젝트 내내 삽질하며 간신히 익숙해져 가는 컨플릭트 해결 과정이다. 앞으로 이 글을 참고하지 않고 브랜치를 오가면서 눈 깜짝할 사이에 깃 컨플릭트를 해결하는 때가 오길 바라며..

1. 컨플릭트가 무엇인가

(1) 컨플릭트가 일어나는 이유:

리모트 feature/branch를 리모트 master에 병합시켜주고 싶은데, 리모트 master와 리모트 feature/branch의 내용이 달라서 머지가 안 되는 경우가 종종 생긴다. 그 경우 conflict가 일어났다고 한다. 컨플릭트란 명칭만 보면 뭔가 상황이 잘못된 것 같다고 느껴지는데, 그냥 로컬과 리모트의 코드를 합치기 위해선 확인할 코드가 있다는 신호 정도로 받아들이면 된다.

(2) 로컬 master를 거쳐서 브랜치로 가져와서 컨플릭트를 해결하는 이유

리모트 master랑 로컬 feature/branch 가 연결되어 있지도 않은데 로컬 feature/branch 브랜치에서 리모트 feature/branch로 백날 push 해봤자 계속 컨플릭트 나고 리모트 master에 merge할 수가 없다. 안전하게 로컬 master에서 리모트 master의 것을 가져와서, 그것을 feature/branch로 가져와서 컨플릭트를 해결하는 것이다. (삼각관계라고 보면 됨)

2. 해결하는 A to Z 방법

(1) 로컬 master에서 리모트 master 것을 pull 받는다.

git pull origin master

(2) 로컬 master는 그대로 놔 두고, 로컬 feature/branch로 checkout해서 간다.

git checkout feature/branch

(3) 로컬 feature/branch에서 로컬 master를 merge 한다.

작업한 것이 날아가는 게 아니라, 변경사항이 있으면 변경사항 옵션이 있다고 보여주는 것 뿐이므로 머지한다고 겁먹지 않아도 된다.

git merge master

(4) 컨플릭트를 해결한다.

vscode의 왼쪽 돋보기 클릭 후 ‘====‘를 검색하면 컨플릭트 난 파일들을 한눈에 볼 수 있다.

(5) 해결 후 깃에 add, commit, push 해준다.

git add . => git commit -m “Fix: 컨플릭트해결” => git push origin feature/branch

3. 만약 master에서 실수로 작업을 한 적이 있어서 계속 컨플릭트가 난다면

작업을 했으면 안 됐지만 만약 작업을 했었다면 다른 브랜치를 파서 옮겨 놓던지.. (필요에 따라 로컬에서 컨씨컨브로 복붙.. 해 놓던지..ㅎ..야매방법.. 비추) 모두 불필요한 내용임을 확인했다면 로컬 master 브랜치를 리셋한다. 다음은 로컬 master 브랜치를 리셋하는 과정이다.

(1) 로컬 master에서 작업한 상황에서 책갈피를 해 둔다.

git stash

(2) 로컬 master에서 커밋한 내역을 검색한다.

git log

(3) 로컬 master에서 커밋한 내역을 쭉 확인하고, 돌아가고 싶은 초기 상태의 커밋 코드를 찾는다.

아마 초기세팅한 상태를 고르면 될 것이다. 찾아서 리셋하면 끝.

git reset --hard 112344345872934052798789907890asdfasdf

(4) 이 상태에서 2번의 과정을 수행한다.

git pull origin master
등등 2번의 과정.

4. 기억하자.

master 브랜치는 신성하다. 작업을 하지 말자.

profile
빵굽는 프론트엔드 개발자

1개의 댓글

comment-user-thumbnail
2020년 12월 26일

👍

답글 달기