본문 바로가기
IT 끄적이기

Github - 조직 변경사항을 유지하면서 내 리포지토리로 연결하려면?

by 미르아 2025. 1. 9.
728x90

프로젝트 작업을 하다가 테스트를 위해 조직의 소스코드를 클론하고 리포지토리를 개인으로 연결했는데

변경사항을 적용하기 어려워 찾아본 내용

 

조직 리포지토리와 자신의 리포지토리를 모두 연결

이를 통해 조직 리포지토리의 변경사항을 가져오고, 자신의 리포지토리로 푸시할 수 있습니다.

조직 리포지토리를 upstream으로 추가

git remote add upstream [조직 리포지토리 URL]

현재 원격 상태 확인

git remote -v

 

 

git remote -v
origin https://github.com/myusername/my-repo.git (fetch)
origin https://github.com/myusername/my-repo.git (push)
upstream https://github.com/orgname/original-repo.git (fetch)
upstream https://github.com/orgname/original-repo.git (push)​

조직의 변경사항 가져오기

조직의 리포지토리에서 변경사항을 가져오려면 다음 명령어를 실행합니다.

git fetch upstream git merge upstream/main​
 

위 명령어는 upstream의 최신 내용을 현재 브랜치(main)에 병합합니다.

자신의 리포지토리로 푸시

병합한 내용을 자신의 리포지토리로 푸시합니다.

git push origin main

 

현재 상태에서는 조직 리포지토리와의 연결이 끊어졌기 때문에 변경사항이 뜨지 않습니다.

조직 변경사항을 유지하려면 조직 리포지토리를 upstream으로 추가하여 필요할 때 변경사항을 동기화하면 됩니다.

 

왜 조직에 피해가 가지 않을까?

 

git push 명령어가 본인의 리포지토리(origin)만 대상으로 설정되어 있기 때문입니다.

조직 리포지토리는 upstream으로만 연결되어 있으므로, 이쪽으로는 푸시할 일이 없습니다.

 

예를 들어, 아래처럼 origin만 푸시 대상입니다:  

 git push origin main
 
조직 리포지토리로 직접 푸시하려면 권한이 필요합니다.
  • 만약 실수로 git push upstream main을 실행하더라도, 조직에서 푸시 권한을 제한해놨다면 오류가 발생하며 변경사항이 적용되지 않습니다.

fetch와 pull은 읽기 전용 작업입니다

  • git fetch upstream이나 git pull upstream main은 조직의 변경사항을 가져오는 작업이며, 조직 리포지토리에는 아무런 영향을 주지 않습니다.
 git push origin main

 

불안과 걱정을 덜기 위해 확인할 방법

1. 현재 원격 저장소 상태를 확인

git remote -v

origin https://github.com/myusername/my-repo.git (fetch)
origin https://github.com/myusername/my-repo.git (push)
pstream https://github.com/orgname/original-repo.git (fetch)
pstream https://github.com/orgname/original-repo.git (push)​
  • 여기서 push 대상이 origin이면 걱정할 필요 없습니다.

2. 푸시를 제한적으로 실행

푸시할 때 항상 명시적으로 origin을 대상으로 지정하면 실수로 upstream에 푸시하는 일을 방지할 수 있습니다:

git push origin main​

3. 조직에 영향을 주지 않는지 테스트

테스트용 브랜치를 생성한 뒤 조직 리포지토리의 변경사항을 가져오고 병합 작업 실행

git checkout -b test-branch
git fetch upstream
git merge upstream/main
git push origin test-branch​

 

이렇게 하면 변경사항은 본인의 리포지토리에만 반영되며, 조직에는 아무런 영향도 가지 않습니다.

728x90