포크(fork)한 레포지토리에 원본(upstream) 변경사항 동기화하기
GitGitHub협업버전관리
스프린트 미션이나 협업을 하다 보면 팀 저장소를 포크해서 작업하는 경우가 많다.
그런데 시간이 지나면 원본 저장소(upstream)가 업데이트되고, 내 포크 저장소(origin)는 점점 뒤처진다.
이럴 때는 upstream의 변경사항을 내 로컬과 포크(origin)까지 동기화해줘야 한다.
1. remote 목록 확인하기
현재 프로젝트에 어떤 원격 저장소(remote)가 연결돼 있는지 확인한다.
Terminal
git remote -v보통 origin만 있을 텐데, 이건 내가 포크한 저장소를 가리킨다.
2. 원본 저장소(upstream) 추가
원본 팀 레포를 upstream이라는 이름으로 추가한다.
Terminal
git remote add upstream [원본 저장소 Git URL]추가가 잘 됐는지 다시 확인한다.
Terminal
git remote -vorigin과 upstream이 같이 보이면 정상이다.
3. upstream 최신 변경사항 가져오기(fetch)
upstream의 최신 상태를 로컬로 가져온다.
Terminal
git fetch upstream여기서 중요한 점이 하나 있다.
fetch는 upstream의 브랜치 정보를 로컬에 다운로드만 해준다.
내 브랜치가 자동으로 업데이트되진 않는다.
4. 내 main을 upstream/main으로 동기화하기
대부분은 포크 저장소의 main(또는 master)을 upstream 기본 브랜치와 맞추는 게 목적이다.
방법 A: merge로 반영하기(안전한 기본)
Terminal
git checkout main
git merge upstream/main
git push origin main- merge는 기록이 남아서 협업에서 무난하다.
- 충돌이 나면 여기서 해결하면 된다.
방법 B: rebase로 반영하기(히스토리 깔끔)
Terminal
git checkout main
git rebase upstream/main
git push origin main- rebase는 히스토리를 깔끔하게 유지한다.
- 다만 상황에 따라 충돌 해결이 더 귀찮을 수 있다.
upstream 기본 브랜치 이름이
main이 아닐 수도 있다. 그때는upstream/master같은 실제 브랜치 이름으로 바꿔서 쓰면 된다.
5. 최신 main 기준으로 작업 브랜치 만들고 푸시하기
upstream 동기화가 끝났다면, 최신 main에서 작업 브랜치를 만든다.
Terminal
git checkout -b react-김지훈
git push -u origin react-김지훈-u를 붙이면 이후부터는 git push만 해도 같은 브랜치로 푸시된다.
정리
git remote -v로 origin 확인git remote add upstream ...으로 원본 연결git fetch upstream으로 원본 최신 상태 가져오기merge또는rebase로 내 main에 반영git push origin main으로 포크(origin)까지 동기화- 최신 main 기준으로 브랜치 만들어 작업
이 방식으로 포크 저장소를 항상 최신 상태로 유지할 수 있다.