본문 바로가기
공부 내용 정리

[GitHub] There isn’t anything to compare. (branch) and (branch) are entirely different commit histories 문제

by onggury 2023. 8. 27.

문제

  • 현재 브랜치는 main, diagram 브랜치 두 개가 있다.
  • 작업 내용을 push 하고 main 브랜치로 PR을 보내려고 했지만, 저장소에 PR 알림창이 떴음에도 pull request 탭에는 보낼 수 있는 PR 이 뜨지 않았다.
  • 저장소를 만들면서 뭔가 버그가 생겼나 싶어서 diagram 브랜치에 들어가서 작업이 제대로 push 되어있음을 확인해봤고, 작업을 다시 수정해서 diagram 브랜치에 다시 push를 해봤는데도 해결되지 않았다.
  • pull request 탭의 내용을 자세히 보니 "There isn’t anything to compare. and  are entirely different commit histories" 라는 말이 있었다.

원인

  • main 브랜치는 인텔리제이에서, diagram 브랜치는 저장소를 만들면서 만들어진 브랜치다(기존 이름에서 diagram으로 이름을 변경했다)
  • main 브랜치와 diagram 브랜치가 서로 다른 시작점을 갖고 있어서 커밋이 서로 끊겨있는 상태였다.
    (캡처는 못했지만, 실제로 인텔리제이 git 탭에서 보니 두 브랜치가 서로 이어진 곳 없이 따로 진행된 모습을 볼 수 있었다)

해결

  • 두 브랜치의 시작점을 맞춰주면 된다.
  • 프로젝트에, 원격 저장소에 있는 브랜치를 업데이트 해주고 진행해야 한다.
    • git remote update

[작업]

  1. 인텔리제이에서 만들어진 master 브랜치로 이동한다. (diagram 으로 변경했기 때문에 이하 diagram으로 명시)

  2. 끊긴 커밋 위치에서 새로운 브랜치(bridge)를 만든다. -> branch bridge

  3. 새로운 브랜치 bridge 로 이동한다.

  4. 연결할 커밋이 있는 브랜치를 지정한다. -> git rebase origin/main
    만약, conflict 가 발생하면 현재 작업하고 있던 작업내용을 commit을 해줘야한다. (아마 git에서 "너 작업한거 다 날려먹을 수 있어. 그러니까 commit해놔" 라고 하는 것 같다.)
    rebase: 하나의 브랜치가 다른 브랜치에서 파생되서 나온 경우, 다른 브랜치에서 진행된 커밋을 다시 가져와서 base를 재설정

  5. 다시 diagram 브랜치로 이동한다.

  6. bridge 브랜치를 diagram 브랜치에 rebase 한다. -> git rebase bridge

  7. main 브랜치에 현재 커밋을 날린다. -> git push origin main

마무리로 인텔리제이에서 새로운 브랜치를 만들어서 프로젝트의 주석을 일부 수정 한 후 push를 했더니 잘 push가 되고 정상적으로 main 까지 PR을 보낼 수 있게 되었다.