[Git] fork한 repository가 업데이트 되어버렸을 때(ft. can't automatically merge)

박기영·2022년 11월 23일
1

Git

목록 보기
4/8

fork한 repository가 갑자기 업데이트되어버려서, 내 PR(Pull Request)와 Conflict가 발생한다면 어떻게 해결해야할까?
우테코 5기 마지막 주 과제 중, 제출 직전 날 테스트 코드가 수정되어,
can't automatically merge를 해결해보라는 제안을 전달받으면서 알아보게 되었다.

왜 발생하는걸까?

can't automatically merge는 왜 발생하는걸까?
상황을 예시로 만들어보겠다.

  1. 내가 어떤 repositoryfork한다.
  2. 열심히 내 repository에서 작업을 한다.
  3. 열심히 일하는 동안 1번 repository에 변경이 발생!!
  4. 3번 상황을 모른채로 내가 해야할 작업을 다 끝냈다.
  5. 1번의 repositoryPull Request를 보낸다.
  6. can't automatically merge 발생!!

그렇다. 내가 forkrepository에서 변경이 발생했는데,
내가 그걸 모른채로 변경 발생 전의 코드에 내 작업을 진행했고, 이를 PR했기 때문이다.

혹여 변경 사항이 미미해서 직접 손으로 변경된 부분만 바꾸고 진행하면 당장은 해결되지만,
이는 다른branch로 진행되고 있는 것과 같으므로,
git에서는 같은 파일을 다룬다고 생각하지 않는 모양이다.
결국에는 또 다시 경고 문구를 마주하게 된다.
이에 대한 자세한 설명은 jinyoungchoi95님 블로그를 참고하면 좋을 것 같다.

구체적으로 어떤 상황이죠?

아래 이미지를 봅시다.

참고 이미지

woowacourse-precourse/javascript-bridge라는 repositoryfork해왔다.
필자의 repositoryRki0/javascript-bridgefork된 것을 확인 가능하다.

이 때, 기본적으로 생성되는 branch가 있다.

참고 이미지

필자의 경우는 main이라는 branchfork로 인하여 기본적으로 만들어졌다.
아, 이는 woowacourse-precourse/javascript-bridge에서 mainfork해왔기 때문이다.

필자는 기능 구현을 위해 Rki0이라는 branch를 생성해서 작업했다.
물론 그 때는 변경이 반영되지 않은 코드를 가지고 있었다.

그런데 woowacourse-precourse/javascript-bridgemain에서 변경이 발생했다.
위 이미지에서 days ago 부분에 숫자가 다른 녀석이 하나 있다. 바로 그 녀석이다.
필자는 이미 변경을 반영해버렸지만, 반영 전에는 원래 repository에만 변경 사항이 기록되어있었다.

fork 해온 repositorymain이라는 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이 되어있는 것을 볼 수 있다.

참고 자료

jinyoungchoi95님 블로그
gollumnima님 블로그
codeinlife님 블로그

profile
나를 믿는 사람들을, 실망시키지 않도록

1개의 댓글

comment-user-thumbnail
2022년 11월 23일

안녕하세요~ 좋은글,,,감사,,,합니다,,,,,,,

답글 달기