git | 다른 저장소의 코드에 이어서 개발하기 / entirely different commit histories 오류

Autumn·2021년 3월 8일
0

TIL

목록 보기
18/19
post-thumbnail

문제 상황

코드스쿼드의 미션은 1. 해당 주차 저장소를 fork, 2. fork해온 origin 저장소를 로컬에 클론, 3. Pull Request 의 과정으로 진행하고 있다.
그런데 이번주 (5주차) 미션을 3주차 미션에 이어서 해야 되는 상황!
간단한 방법으로는 그냥 로컬의 폴더를 복붙해서 쓰면 되는데, 왠지 git을 이용해서 해보고 싶었다.

5주차의 upstream, origin 저장소가 있고, 3주차의 최신 코드를 불러와서 이어서 작업해야 한다.
(나의 경우는 3주차 origin저장소의 step4 브랜치에 푸시된 코드가 최신이었다.)

3주차의 코드와 새로운 5주차 저장소의 코드가 완전 관련이 없어서 entirely different commit histories. 이런 에러가 나왔다. 로컬과 오리진에서는 크게 문제가 없어보였는데 Pull Request를 생성하면 비교할 코드가 없다고 나오면서 PR이 불가능했다.


해결 과정

pull로 가져온 다른 저장소의 커밋들을 하나의 커밋으로 squash해서 현재 개발하고자 하는 저장소의 특정 커밋에 rebase 하면 된당. 🤩
갓 스택오버플로우 댓글에 누군가 "git rebase -i origin/master this worked for me." 라고 써놔서 처음엔 그냥 보고 넘겼다가, 나중에 다시 보니 저 명령어가 커밋을 뭉쳐서 리베이스하는 거였다.

  1. 포크한 5주차 저장소 클론

  2. remote에 upstream (5주차 코쿼저장소), shopping(3주차 포크했던 오리진저장소) 등록
    step1 브랜치 생성, 체크아웃

  3. git pull shopping step4 step1 브랜치에 shopping의 step4 브랜치 pull (step4가 제일 최신이라)

  4. git rebase -i 7094f2a (커밋을 하나로 뭉쳐서 베이스를 5주차 코쿼저장소 init commit으로 바꿈)

(참고) 3에서 pull 할 때 entirely different commit histories. 라면서 pull이 안되면,
--allow-unrelated-histories 옵션을 붙여주면 된다.

git pull shopping step4 --allow-unrelated-histories


이게 pull까지 진행했을 때의 상태인데, upstream의 이니셜 커밋이 있고 그 위로는 내가 예전에 했던 3주차의 커밋들이 있는데 그 사이가 똑 떨어져있다. 저 커밋들을 빨간 점과 연결을 시켜줘야 한다!!

꼭 squash를 해야하는지는 잘 모르겠는데, 3주차 커밋들은 이미 PR을 보냈던 커밋들이어서 그냥 하나로 뭉쳐서 rebase 하는 게 좋을 것 같았다. (아마 3주차 커밋들은 쭉 이어져 있으니까 하나로 뭉치지 않고도 제일 처음 커밋만 rebase하면 해결되지 않을까 싶다.)

git rebase -i 참고한 블로그 여기에 과정이 너무 친절하게 설명되어 있다.


rebase 결과, upstream과 origin 위에 3주차의 코드가 깔끔하게 하나로 합쳐져서 올라가있는 것을 확인할 수 있다. PR이 되는지 테스트하기 위해 테스트 커밋도 작성하고 push해보았다.
push하고 나니, rebase 과정에서 잘 모르고 그냥 커밋해서 parent 어쩌고라는 지저분한 커밋 메시지로 들어가서, 커밋 메시지도 수정해주었다.

👏👏👏 깃허브에서 봐도 깔꼼~쓰
코드스쿼드 저장소의 Initial commit 위에 깔끔하게 올라갔다.

profile
한 발짝씩 나아가는 중 〰 🍁 / 자잘한 기록은 아래 🏠 아이콘에 연결된 노션 페이지에 남기고 있어요 😎

0개의 댓글