TIL

TIL.73 Github / Git 충돌(Conflict) 발생 해결

codermun 2020. 12. 20. 23:29
728x90
반응형

Git에서 master(main)의 brach를 만들고 작업을 하다보면 pull request 시 Confilct(충돌)이 나는 경우가 있다.

(또는 Github에서도 확인이 가능하다)

 

Conflict 발생이유

내가 pull origin main을 한 후 다른 작업자가 나와 같은 라인을 수정하고,

수정한 내역을 main과 Merge할 경우 발생한다.

 

이때 Git 충동을 해결하는 2가지 방법이 있다고 한다.

1. Merge --> Merge로 해결을 하였다.

2. Stash  --> '책갈피' 개념으로 생각, 지금의 코드를 만들어내긴 했는데 뭔가 오류가 생기게 됩니다.

하지만 그렇다고 코드를 날려버리기엔 아까울 때, 백업 및 책갈피 개념으로서 이 명령어를 쓴다고 한다.


Merge

나의 로컬 master(main) 에서 Github 원격저장소의 main을 pull 받는다.

git pull origin main

그리고 나서 git checkout을 통해 충돌이 발생했던 branch로 이동하고

이 branch를 최신버전의 로컨 main과 merge해준다.

git checkout feature/productview

 

git merge main

이 과정을 거치면 pull request했을때 충돌이 났던 상황이 재연된다.

다른 작업자가 수정해놓은 최신버전과 현재 내가 수정한 branch가 충동하고 있는 상황이다.

이렇게 충돌된 파일이 확인되면 해당 파일을 수정하면 된다.

(main) $ git checkout feature/productview             # 내 작업 브랜치로 이동
Switched to branch 'feature/productview '

(feature/productview ) $ git merge main               # 최신으로 업데이트 된 main 브랜치를 내 작업 브랜치와 merge
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md          # 충돌된 파일 이름은 README.md
Automatic merge failed; fix conflicts and then commit the result.

충돌이 일어나면 아래와 같은 예시로 확인할 수 있다.

출처 : Github : Git pull 후, 충돌(Conflict) 발생 시 (tistory.com)

 

Github : Git pull 후, 충돌(Conflict) 발생 시

해당 글은 https://blog.naver.com/kbs4674/221174678439 로 부터 게시글이 이전되었습니다. Git pull을 하는데 갑자기 Conflict 에러가 발생했습니다!  이럴 때는 의외로 간단한 해결방법이 있는데 바로 코드..

kbs4674.tistory.com

 

 

HEAD는 되기 전, 내가 가지고 있던 코드로서 과거본이라고 보면 되고,

origin/main은  git pull  후, 새로 반영된 코드로서 최신본이라고 보면 된다.

둘 중에 어느 코드를 사용할지 고른 후, 안 쓸 코드에 대해서는 지우면 된다.


해결 후 add / commit / push로 해결하면 된다

add .
commit -m "dsds"
git push #origin main

Stash 

stash 라는 해결방법 또한 존재합니다.

stash는 '책갈피' 개념으로 생각하면 되는 개념으로서, 지금의 코드를 만들어내긴 했는데 뭔가 오류가 생기게 된다.

하지만 그렇다고 코드를 날려버리기엔 아까울 때, 백업 및 책갈피 개념으로서 이 명령어를 사용하자

 참고  이 명령어를 쓰게되면 HEAD상태(commit 최신본)으로 되돌아가게 됩니다.

git stash

 단순히 위 명령어만 치면은 과거 코드본 상태인 HEAD 상태로 되돌아가게 되는것이 확인된다!

 

stash에 저장했던 과거의 코드를 열람 및 가져오고 싶을때

1) 열람

git stash list

 

2) stash 당시 작업내역에 대해 백업해뒀던 코드 가져오기

git stash pop

pop은 stash 리스트 중 마지막 stash만 가져옵니다!

 

자료 참고 및 출처

Github : Git pull 후, 충돌(Conflict) 발생 시 (tistory.com)

728x90
반응형