Git Fork 프로젝트 Merge Request 보내는 방법

Git Fork 프로젝트 Merge Request 보내는 방법

Python
DevOps
Git Fork 프로젝트 Merge Request 보내는 방법
Author

gabriel yang

Published

October 8, 2024


Git에서 포크된(Forked) 코드를 원본 코드(Upstream)와 동기화하고 머지 요청(Merge Request)을 보내는 과정은 오픈소스 프로젝트에 기여할 때 중요한 단계입니다. 이 과정을 시각적으로 이해하기 위해 포크된 리포지토리와 원본 리포지토리의 구조를 함께 살펴보겠습니다.

Git Fork 프로젝트를 원본 코드와 동기화하고 Merge Request 보내는 방법

1. 프로젝트 Fork하기

먼저 기여하고 싶은 프로젝트를 GitHub에서 찾은 후, 프로젝트를 자신의 GitHub 계정으로 포크(Fork)합니다. 이렇게 하면 해당 프로젝트의 복사본이 자신의 GitHub 리포지토리로 생성됩니다.

Git 구조 시각화 (초기 상태)

Original Repo (Upstream)
├── main
Forked Repo (Your Repo)
├── main

포크한 후에는 원본 프로젝트(Upstream Repo)와 자신의 리포지토리(Forked Repo)가 동일한 상태입니다.

2. 로컬 환경에 Forked 리포지토리 클론

포크한 프로젝트를 자신의 로컬 환경으로 클론(Clone)합니다.

git clone https://github.com/your-username/forked-repo.git

your-username에는 자신의 GitHub 사용자 이름을 넣고, forked-repo에는 포크한 리포지토리 이름을 넣습니다. 클론한 디렉터리로 이동합니다.

cd forked-repo

Git 구조 시각화 (클론된 후)

Original Repo (Upstream)
├── main
Forked Repo (Your Repo)
├── main
Local Repo (Your Local)
├── main

로컬 리포지토리는 Forked Repo의 복사본입니다. 현재까지는 원본 코드와 동일한 상태입니다.

3. Upstream 원본 리포지토리 설정

이제 원본 리포지토리(Upstream)를 설정해야 합니다. Upstream 리포지토리는 포크한 원본 프로젝트를 가리킵니다. 이를 통해 최신 변경 사항을 동기화할 수 있습니다.

git remote add upstream https://github.com/original-owner/original-repo.git

original-owneroriginal-repo에는 원본 프로젝트의 소유자와 리포지토리 이름을 넣어줍니다.

Git 구조 시각화 (Upstream 추가)

Original Repo (Upstream)       <- Upstream
├── main
Forked Repo (Your Repo)        <- Origin
├── main
Local Repo (Your Local)
├── main

Upstream 리포지토리가 추가되면, 이제 원본 프로젝트와 동기화할 수 있는 준비가 완료됩니다.

4. Upstream 리포지토리와 동기화

이제 원본 프로젝트의 최신 변경 사항을 로컬 리포지토리에 반영해야 합니다. Upstream 리포지토리에서 변경 사항을 가져와 현재 브랜치에 병합할 수 있습니다.

git fetch upstream
git checkout main
git merge upstream/main

위 명령어는 upstream에서 최신 변경 사항을 가져온 후, 현재 브랜치(main)에 병합하는 작업을 수행합니다.

Git 구조 시각화 (Upstream과 동기화된 후)

Original Repo (Upstream)
├── main  (updated)
Forked Repo (Your Repo)
├── main
Local Repo (Your Local)
├── main  (updated)

이제 로컬 리포지토리와 원본 리포지토리의 코드가 동기화되었습니다.

5. 충돌 해결 (Conflict Resolution)

병합 과정에서 충돌이 발생할 수 있습니다. 이 경우, 충돌 파일을 수정하고 병합을 완료한 후 커밋합니다.

git add .
git commit -m "Resolved merge conflicts"

6. 로컬 변경 사항을 Forked 리포지토리에 Push

동기화된 코드를 자신의 GitHub 리포지토리(Forked 리포지토리)로 푸시합니다.

git push origin main

Git 구조 시각화 (Forked Repo에 Push 후)

Original Repo (Upstream)
├── main  (updated)
Forked Repo (Your Repo)
├── main  (updated)
Local Repo (Your Local)
├── main  (updated)

로컬에서 동기화한 내용을 자신의 포크된 리포지토리로 푸시하면 모든 것이 최신 상태로 유지됩니다.

7. Merge Request(Pull Request) 생성

이제 원본 프로젝트로 변경 사항을 요청하는 머지 요청(Merge Request, 또는 Pull Request)을 생성할 준비가 되었습니다. GitHub로 가서 포크한 리포지토리로 이동한 후, “New Pull Request” 버튼을 클릭합니다. 요청 내용을 작성하고 제출하면 됩니다.

8. PR 검토 및 병합

원본 프로젝트의 관리자가 PR을 검토한 후, 피드백을 줄 수 있습니다. 필요한 경우 추가 수정 후 다시 푸시하면 PR이 자동으로 업데이트됩니다. 관리자가 승인하면 코드가 원본 프로젝트에 병합됩니다.