GitHub에서 포크한 레포지토리로 작업하다 보면, 원본 저장소로 PR을 올린 뒤 다음 메시지를 마주칠 때가 있다.
“These conflicts are too complex to resolve in the web editor.”
이 메시지가 뜨면 GitHub 웹에서 충돌을 해결할 수 없다는 뜻이고,
반드시 로컬에서 직접 충돌을 해결한 뒤 push 해야 한다.
포크에서 넘어오는 PR인 만큼 충돌 해결 방식이 일반 저장소와 조금 다르다.
아래는 내가 실제로 해결한 절차를 정리한 내용이다.
1. 원본 저장소를 upstream으로 등록
포크한 저장소를 로컬에 클론하면 기본 remote는 origin 하나만 잡혀 있다.
원본 저장소의 최신 내용을 가져오기 위해 upstream을 등록한다.
// 먼저 upstream 되어 있는지 확인
git remote -v
// 없으면 upstream 등록
git remote add upstream https://github.com/원본조직/원본레포.git
// 이미 등록된게 있으면
git fetch upstream
등록 뒤 remote 리스트를 확인해보면 origin과 upstream 두 개가 보인다.
2. PR을 올린 브랜치로 체크아웃
PR이 열린 브랜치로 이동한다. (내가 작업하던 레포)
3. 원본 저장소 최신 코드를 병합
포크에서 작업한 브랜치와 원본 레포 사이에 충돌이 생긴 것이므로,
원본의 기준 브랜치를 내 브랜치에 병합한다.
git merge upstream/main
충돌이 발생하면 충돌 표식이 뜬 파일을 직접 수정한다.
수정이 끝나면 스테이징하고 커밋한다.
git add .
git commit
4. 해결된 브랜치를 포크(origin)으로 푸시
중요한 점은 원본 저장소로 push할 필요가 없다는 것이다.
PR은 내 포크 저장소의 브랜치를 기반으로 올라가 있기 때문에,
포크 저장소(origin)으로 push만 하면 된다.
푸시가 완료되면 GitHub에서 PR 페이지가 자동으로 업데이트되며
충돌이 사라지고 Auto-merge가 가능해진다.
정리
포크 기반 PR의 충돌은 반드시 포크 레포의 브랜치에서 해결한다.
해결 흐름은 다음과 같다.
- 원본을 upstream으로 등록
- PR 브랜치 체크아웃
- upstream/main 병합
- 충돌 해결 후 포크(origin)으로 push
- PR 자동 업데이트 → merge 가능
포크 레포라고 해서 특별한 작업이 필요한 것은 아니고,
충돌 해결 후 push 대상이 origin이라는 점만 기억하면 된다.
'Github' 카테고리의 다른 글
| [TIL] git 기본 명령어 (0) | 2024.05.07 |
|---|