본문 바로가기

DEV

[Git/GitHub] Fork와 Branch (모르고 Fork를 해버린 날..)

반응형

협업을 하려면 Contributor로 초대를 받아야 하는데 내가 이메일 주소를 오타로 잘못 보내서 초대를 안받았다.

 

나는 그런줄도 모르고 GitHub에 있는 코드를 Clone 하고 개발 후 오늘 팀원들과 모여 branch를 publish 해봤다.

내 branch를 publish했는데 fork this repository를 하겠냐는 창이 떴다.

어떻게 하면 되냐고 묻자 팀원분들이 한번 해보라 해서 일단 fork를 하였다.

 

그리고 push를 시험삼아 해보기로 해서 push를 하였다..

나는 Fork를 처음 해봤기에 잘몰라서 일단 해봤는데

팀원분들이 해당 GitHub주소에 내 branch가 안보인다고 하였다.

 

뒤늦게 알았는데 Fork를 해서 리포지토리가 내 계정에 따로 만들어져 있었고

git remote -v 했을 때 주소가 내 계정 리포지토리 안으로 되어있었다...

 

그리고 push가 main에 되버려서 곤란한 상황이 되었다...

 

결국 그냥 그대로 두고 개발을 진행하기로 했다.

어짜피 많은 기능을 추가한것도 아니고 UI만 있기 때문에 괜찮을 것 같기도 하다.

하지만 해당 코드를 내가 이미 다시 수정해서 나중에도 복잡해질 것 같다.

 

이런일이 없도록 Fork와 Branch에 대해서 공부해야겠다..

 

Fork

Fork는 GitHub에서 다른 사용자의 저장소를 복사하여 자신의 계정 아래 새로운 저장소를 만드는 것이다.

원본 저장소(upstream 저장소)와 코드 및 가시성 설정을 공유하지만, 독립적으로 변경할 수 있다고 한다.

  • 주로 오픈 소스 프로젝트에 기여하거나, 원본 저장소에 직접 접근 권한이 없는 경우 사용된다.
  • Fork를 통해 변경 사항을 만들고, 이를 원본 저장소에 Pull Request로 제출하여 통합 요청할 수 있다.
  • 예를 들어, 공공 프로젝트에 기여하려면 먼저 Fork한 수, 자신의 Fork에서 작업한 뒤 Pull Request를 제출하는 것이 일반적이라고 한다.

 

Branch

Branch는 Git 저장소 내에서 별도의 개발 라인을 생성하는 것으로, 메인 코드베이스를 변경하지 않고 새로운 기능, 버그 수정등을 진행할 수 있다.

  • Branch는 가볍고, 쉽게 생성, 병합, 삭제할 수 있다.
  • 기본 Branch는 보통 'main' 또는 'master'
  • 팀 프로젝트에서 여러 개발자가 동시에 작업할 때 보통 각자 Branch를 만들어 협업 효율성을 높임.

 

Fork와 Branch의 차이점

  Fork Branch
범위 새로운 독립적인 저장소 생성 동일한 저장소 내 별도 개발 라인
접근 권한 원본 저장소에 쓰기 권한이 필요 없음 저장소에 쓰기 권한이 필요
목적 외부 기여, 독립적 작업, 실험 기능 개발, 버그 수정, 내부 관리
사용 시나리오 오픈 소스 기여, 개인 프로젝트 복사 팀 협업, 기능 병합, 실험적 변경
동기화 원본 저장소와 수동 동기화 필요 동일 저장소 내 자동 동기화 가능

 


추가로 branch를 원격 저장소에 만드는 과정을 살펴보자.

 

1. branch 확인

git branch

 

2. 로컬에서 브랜치 삭제

git branch -d 삭제할브랜치명

 

3. main branch로 이동

git checkout main

 

4. main pull

git pull origin main

 

5. branch 생성

git checkout -b 생성할브랜치명

 

6. publish branch

git push -u origin 생성한브랜치명

 

7. 변경된 모든 파일을 Staging Area에 추가

git add .

 

8. commit

git commit -m "메세지"

 

9. 현재 작업 중인 로컬 브랜치를 원격 저장소의 동일한 이름의 브랜치로 push

git push origin

 

* local branch, remote branch 연동

git branch --set-upstream-to origin/<브랜치 이름> 

반응형