수업 준비를 위해 Github의 강사님 레포지토리를 Fork한 뒤 작업했다. 그 다음 수업을 준비하기 위해 강사님 레포에 업데이트 된 내용을 받아오려고 했다. 강사님이 fetch를 이용하라고 하셨어서 한 번 CLI로 도전해봤다.
그러나...
git fetch -a
를 아무리 해도 브랜치 일부만 fetch가 된다든가...fetch된 브랜치에서도 전체 커밋이 fetch가 된 게 아니라 일부 브랜치 내용만 fetch가 되는 일이 발생했다.
대체 이게 무슨 일...
뭔가 잘못된 것 같아 급하게 Sync fork를 하려고 했는데
...
강사님 레포지토리의 브랜치 갯수는 14개, 내 레포지토리의 브랜치 개수는 10개....인데 왜 아무것도 sync fork할게 없을까 이게 대체 무슨일일까...
구글링을 열심히 해보니 이렇게 원래의 레포지토리를 upstream, 내 원격 레포지토리는 origin이라 한다는 것을 알 수 있었다.
(물론 이게 정확한 의미는 아니다. upstream과 downstream의 정의는 그냥 상대적인 것!)
아마도 로컬에서 fetch하면서..뭔가 꼬여 버린 것이 아닐까
두 개를 동기화 하기 위해서는
git remote -v
를 통해 upstream이 설정되어 있는지 확인한다.
없다!
그렇다면 upstream을 추가해주면 된다.
명령어는
git remote add upstream {원래의 Repository 주소}
잘 추가되었다!
그렇다면 이제 진짜 fetch를 받으면 된다. 우선 main 브랜치로 checkout해주고
git fetch upstream
명령어를 입력하면 이렇게 새로운 브랜치들이 내 로컬에도 생기게 된다. 해당 브랜치들은 upstream/{브랜치명}
의 형식으로 생성된다.
이 이후에
git checkout {upstream에 존재하는 브랜치명}
을 입력하면 로컬 브랜치가 생기면서
branch '{브랜치명}' set up to track 'upstream/{브랜치명}'.n
이라는 메세지가 뜨고 upstream의 해당 브랜치를 local의 브랜치가 tracking하게 된다.
주의해야 할 점은 내 원격 레포지토리에는 이런 업데이트가 단 하나도 들어가 있지 않다는 것. origin에 push하기 전 까지는 origin에 해당 부분이 update되지 않는다.
해당 방법 외에도 다른 방법이 있는지 잘 모르겠다.
어쨌든 내가 찾은 최선의 방법이었고...동기화되지 브랜치들을 모두 동기화할 수 있었다.
fetch말고 upstream의 코드들을 local로 pull하면 좀 더 편할 것 같기도...
그냥 처음부터 Sync Fork를 눌렀으면 이런 일이 안생겼을까??
git 너무 어렵다...