fork한 repository가 갑자기 업데이트되어버려서, 내 PR(Pull Request)와 Conflict가 발생한다면 어떻게 해결해야할까?
우테코 5기 마지막 주 과제 중, 제출 직전 날 테스트 코드가 수정되어,
can't automatically merge를 해결해보라는 제안을 전달받으면서 알아보게 되었다.
can't automatically merge는 왜 발생하는걸까?
상황을 예시로 만들어보겠다.
repository를 fork한다.repository에서 작업을 한다.repository에 변경이 발생!!repository에 Pull Request를 보낸다.can't automatically merge 발생!!그렇다. 내가 fork한 repository에서 변경이 발생했는데,
내가 그걸 모른채로 변경 발생 전의 코드에 내 작업을 진행했고, 이를 PR했기 때문이다.
혹여 변경 사항이 미미해서 직접 손으로 변경된 부분만 바꾸고 진행하면 당장은 해결되지만,
이는 다른branch로 진행되고 있는 것과 같으므로,
git에서는 같은 파일을 다룬다고 생각하지 않는 모양이다.
결국에는 또 다시 경고 문구를 마주하게 된다.
이에 대한 자세한 설명은 jinyoungchoi95님 블로그를 참고하면 좋을 것 같다.
아래 이미지를 봅시다.

woowacourse-precourse/javascript-bridge라는 repository를 fork해왔다.
필자의 repository인 Rki0/javascript-bridge에 fork된 것을 확인 가능하다.
이 때, 기본적으로 생성되는 branch가 있다.

필자의 경우는 main이라는 branch가 fork로 인하여 기본적으로 만들어졌다.
아, 이는 woowacourse-precourse/javascript-bridge에서 main을 fork해왔기 때문이다.
필자는 기능 구현을 위해 Rki0이라는 branch를 생성해서 작업했다.
물론 그 때는 변경이 반영되지 않은 코드를 가지고 있었다.
그런데 woowacourse-precourse/javascript-bridge의 main에서 변경이 발생했다.
위 이미지에서 days ago 부분에 숫자가 다른 녀석이 하나 있다. 바로 그 녀석이다.
필자는 이미 변경을 반영해버렸지만, 반영 전에는 원래 repository에만 변경 사항이 기록되어있었다.
fork 해온 repository의 main이라는 branch에서 변경이 발생한 이 경우가
지금 해결하고자하는 can't automatically merge를 유발하는 경우인 것이다.
해결 방법은 아래와 같다.
$ git checkout [fork 후 내 repository의 branch]
$ git pull
$ git checkout [내가 작업 중인 내 repository의 branch]
$ git merge [fork 후 내 repository의 branch]
설명이 좀...일반적인 경우로 설명하려다보니 오히려 이해가 안된다.
좀 더 이해하기 쉽게 필자의 상황을 대입해보겠다.

우선, 내 repository에 있는 main에 변경 사항을 반영한다.
위 이미지대로 Sync fork에서 Update branch를 클릭하면 된다.
그러면 main은 변경 사항이 반영이 된 것이다.
문제는, 내 작업물이 들어있는 Rki0에 반영이 되어있지 않다는 것이다.
이제 터미널에서 아래 코드들을 입력해보자.
$ git checkout main
$ git pull
$ git checkout Rki0
$ git merge main
아마 개발 중이라면 VSC 내에서 Rki0, 즉, 내가 개발 중인 branch에 있을 것이다.
거기서 main으로 이동한다.
위에서 main에는 변경 사항을 반영해놨으므로, pull을 통해 정보를 가져온다.
다시 내 작업물이 있는 Rki0으로 돌아간다.
main의 변경 사항을 합쳐준다.
이렇게 하면...

짠! 이제 can't automatically merge 문제가 보이지않는다!
참고로, 변경 사항은 어떻게 반영이 되어있는가를 확인하고 싶다면 commit 로그를 보면된다.

변경이 발생했던 시점에 commit이 되어있는 것을 볼 수 있다.
안녕하세요~ 좋은글,,,감사,,,합니다,,,,,,,