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
이 되어있는 것을 볼 수 있다.
안녕하세요~ 좋은글,,,감사,,,합니다,,,,,,,