-
TIL.73 Github / Git 충돌(Conflict) 발생 해결TIL 2020. 12. 20. 23:29728x90
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)
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만 가져옵니다!
자료 참고 및 출처
728x90'TIL' 카테고리의 다른 글
TIL.76 AWS (0) 2020.12.23 TIL.75 RSETfulAPI (0) 2020.12.22 TIL.72 select_related 와 prefetch_related (1) 2020.12.19 TIL.71 JsonResponse 활용 (0) 2020.12.18 TIL.67 Trello 다루기 (0) 2020.12.14