Git

[github] fork, upstream & pull request 간단히 이해하기

leejunkim 2025. 5. 24. 19:53

만약에 open source 프로젝트들에 기여를 하고 싶으면 어떻게 시작해야 할까??

java의 open source 프로젝트인 spring-ai프로젝트로 예시를 들어보겠다.

fork

fork는 깃허브에 올라와 있는 리포를 단순히  내 깃허브 계정으로 복제한다는 뜻이다.

이런식으로 현재 (5/24/25) 시각으로 spring-ai 깃허브 리포에 들어가보면,

 

이렇게 fork하는 옵션이 있다. Fork를 누르고 기본값 세팅을 다 클릭해주면, 이런식으로 내 게정 아래 forked된 리포에 들어가볼 수 있다:

 spring-ai 밑에 "forked from spring-projects/spring-ai"를 볼 수 있다.

 

 

자 이제, 이 fork로 복제된 리포에 수정사항을 추가하고 싶으면, 로컬 디렉토리에 가서 clone을 통해 이 리포를 받아주어야 한다.   

 

먼저 저 초록색 Code 버튼을 누르면 HTTPS, SSH 두가지 중 1개를 선택해 복사해준다.

# 내 계정에서 fork된 저장소 클론
git clone git@github.com:lkim0402/spring-ai.git
cd spring-ai

# 브랜치 생성 및 수정
git switch -c feature/update-readme
echo "test add" >> README.md
git add README.md
git commit -m "add text in README.md"

 

(이 코드는 그냥 예시이다 ㅎㅎ)

이렇게 예시로 브랜치도 파고 수정사항도 넣었다고 치자.

upstream

이제 upstream 을 사용해서 내가 fork한 원본 저장소를 가리킬 수 있게 되고, 내가 만들었던 수정사항에 pull request를 넣을 수 있다. upstream -> 내가 fork를 한 원본 저장소 라고 기억하면 될것이다.

자주 사용되는 워크플로우는 대략 이렇게 생겼다:

# 원본 저장소를 upstream으로 등록
git remote add upstream git@github.com:spring-projects/spring-ai.git

# 원본 저장소의 변경사항 가져오기
git fetch upstream

# 내 main 브랜치에 병합 (또는 rebase)
git checkout main
git merge feature/update-readme

# 내 GitHub 저장소에도 반영
git push origin main

3번 스텝에서는, 반드시 main branch에 돌아가서 merge을 진행해야지 fork된 리포의 업데이트가 반영이 된다.

 

pull request

만약 위의 스텝들까지 했다면, forked된 github repo > pull request 에 들어가서 pull request를 만들 수 있다.

그러면 이제 위 사진에서 보이는 것처럼 왼쪽에는 오리지널 spring ai 리포로 내 forked된 리포의 수정사항이 merge되는 것을 요청할 수 있다.

'Git' 카테고리의 다른 글

[git] merge VS rebase  (1) 2025.05.27
[github] fetch VS pull (+origin)  (0) 2025.05.23
[git] git workflow, git status & diff 정리  (1) 2025.05.23
[git] Local congifuration 정리  (0) 2025.05.23