여기에서 Git은 전적으로 VSCODE에 의존하여 사용합니다.
우선 현재 문제 상황에 대한 이해.
1. 해당 Repo에서 Fork 하게 되면, 코드는 Fork 한 상태에서 멈추며, 내가 업데이트 하는 것만 반영이 됨.
2. 빠르게 수정하고 반영하면 상관없으나, 시간이 걸리게 될 경우 다른 사람 또한 해당 코드에 자신의 코드를 반영하게 됨.
3. 시간이 지날수록 내가 Fork한 코드는 원본 코드와 괴리가 발생하게됨.
4. 내가 PR을 날릴 때 코드는 바뀌어져 있으므로, 필연적으로 conflict가 발생하게 됨
문제 상황을 만들기 위한 Repo를 2개 준비. 1개는 메인 코드, 1개는 fork 하여 PR 하는 레포가 됨.
main repo로, readme를 통해 업데이트 반영 여부를 확인할 예정
현재 상황에서 Fork를 통해 가져온 레포로, 같은 계정에서 할 수 없어 임의의 단체 계정을 활용하였다.
readme에 적힌 내용은 main repo라는 글만 써져 있으며, 1개의 파일만 있다.
개발하는 상황을 가정하여, Fork를 뜬 이후에 4번의 커밋이 있었다고 가정할 예정이다.
commit 1 ~ 4 까지 부여하고, Fork 된 Repo에서는 5번 커밋을 할 예정.
commit 1 -> 저장 -> 푸시 -> commit 2-> 저장 -> 푸시... commit 4 까지 총 4번의 커밋을 걸쳐 만들었다.
Fork된 Repo에서 commit 5를 Fork Repo에 커밋한다.
중간에 설명에서도 나오지만 커밋의 차이가 발생함이 나온다.
이 상태에서 원본 Repo에 PR을 하려고 하면 어떤 일이 일어날까?
conflict 에러를 좀 더 자세히 살펴보면
Fork 이후 원본 Repo에 커밋되었던 내용이 반영되지 않은 채, Fork Repo에 반영한 내용을 커밋하려고 하자 충돌이 나게 된다.
여기에서 해결 방법으로 하고자 하는 것은,
1. 내가 Fork 후 수정한 코드가 날라가지 않도록 현재 시점에서 추가 Branch를 만들고
2. Fork Repo에서 기존 Repo의 수정 사항을 반영한 뒤
3. Branch를 다시 Fork Repo에 머지 후
4. 최종 Fork Repo에서 Pull Request를 기존 Repo에다가 하려고 한다.
해당 버튼을 누른 후, 이름을 지어주면 branch를 만들 수 있다. 현재 작업 특성상 같은 곳에 원본 Repo와 Fork Repo가 함께하고 있어 2개가 뜨는데, 반드시 Fork된 Repo에서 branch를 반영한다.
add remote 기능을 이용해서 원본 Repo를 추가 후,
원격 이름은 통상 upstream이라고 하며, 여기에선 example_upstream이라는 이름으로 진행함
이후 Pull from을 누르게 되면
원본 Repo를 연결했던 example_upstream을 선택 가능함
가져올 분기가 여러가지 일 경우 주의해야하며, 여기에선 원본 Repo에 별도의 branch가 존재하지 않음
위 버튼을 누르면 다음과 같이 conflict 난 부분이 표시가 되며 나오게 됨.
이때 아래에 있는 Resolve in merge editor를 사용하면 간단하게 해결할 수 있다
원본 커밋 내용과, 우측 Fork Repo 내용이 나란히 있게 되는데, 내가 원하는 형태는
commit이 번호대로, 아래로 나란히 나열되는 것을 원한다.
이 때 먼저 포함되고자 하는 내용의 수락 버튼을 먼저 누른다.
여기에선 수신수락 버튼을 먼저 누르면 아래에 먼저 반영이 되고, 그 다음에 현재 수락 버튼을 누른다.
아래처럼 내용이 절렬되어서 들어가게 되고, 더 이상 충돌이 일어나지 않게 된다.
충돌하지 않음이 확인되면, 충돌 갯수 또한 0이 되며, 이 때 complete merge 버튼을 누르면 된다.
바뀐 내용에서 커밋 버튼이 활성화 되며, 해당 버튼을 누르면 충돌 커밋이 해결 된 상태가 된다.
이후 동기화 버튼을 누르게 되면 모든 내용이 포함된 Fork Repo가 완성이 된다.
이번에는 VSCODE를 통해 PR를 해본다,
Fork레포에서 원본 레포로 풀 리퀘스트 Create
결과, no conflict가 떳음을 확인할 수 있다.
Pull Request를 완료한 모습의 인증으로 이번 github conflict 해결을 마친다.
'23년 이전 글 > IT 교양' 카테고리의 다른 글
참조링크 (0) | 2022.07.12 |
---|---|
프로그래밍 언어 문법을 빠르게 배우려면 (0) | 2022.07.09 |
코드를 빠르게 이해하려면 (0) | 2022.06.30 |
다른 사람의 코드를 읽기 어려운 이유 (0) | 2022.06.29 |