문제
- 현재 브랜치는 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
[작업]
- 인텔리제이에서 만들어진 master 브랜치로 이동한다. (diagram 으로 변경했기 때문에 이하 diagram으로 명시)
- 끊긴 커밋 위치에서 새로운 브랜치(bridge)를 만든다. -> branch bridge
- 새로운 브랜치 bridge 로 이동한다.
- 연결할 커밋이 있는 브랜치를 지정한다. -> git rebase origin/main
만약, conflict 가 발생하면 현재 작업하고 있던 작업내용을 commit을 해줘야한다. (아마 git에서 "너 작업한거 다 날려먹을 수 있어. 그러니까 commit해놔" 라고 하는 것 같다.)
rebase: 하나의 브랜치가 다른 브랜치에서 파생되서 나온 경우, 다른 브랜치에서 진행된 커밋을 다시 가져와서 base를 재설정 - 다시 diagram 브랜치로 이동한다.
- bridge 브랜치를 diagram 브랜치에 rebase 한다. -> git rebase bridge
- main 브랜치에 현재 커밋을 날린다. -> git push origin main
마무리로 인텔리제이에서 새로운 브랜치를 만들어서 프로젝트의 주석을 일부 수정 한 후 push를 했더니 잘 push가 되고 정상적으로 main 까지 PR을 보낼 수 있게 되었다.