깃허브의 드래프트와 포크/클론의 차이 ( + Fetch)


Draft

PR을 받을 단계는 아니고 작성중인 경우에 사용

아래와 같은 경우 사용

  • 일단 깃허브에 올리지만 추가적으로 소스코드를 작성중일때

  • 여러 PR들의 부모역할로 처리함 // 부모티켓(드래프트) <- 자식티켓1,2..

  • 소스코드 수정요청을 받았을때 일단 draft처리를 해두고 수정한뒤 다시 PR상태로한다


Fork

포크의 경우 간단하게 설명하자면 깃허브에서 원본 레포지토리(*1) -> 내 원격레포지토리(*2)에 Fork해서 레포지토리를 추가하는것이다

그리고 그 추가한 원격 레포지토리(*2)를 내 로컬 레포지토리(*3)로 추가한다.

로컬 레포지토리(*3)에서 수정한 내용은 Fork레포지토리(*2)에 추가/수정도 할수있고 원본 레포지토리(*1)의 수정내용도 원격레포지토리(*2)로 받아올수있다

만약 원본 레포지토리(*1)에 수정을 원하면 Fork한 레포지토리(*2)를 수정한후 원본레포지토리(*1)에 PR을 하면 된다


Clone

클론의 경우 원본 레포지토리(*1)혹은 내원격레포지토리(*2)를 내 로컬의 레포지토리(*3)와 1:1 맵핑하는것이다

그러므로 수정이 제한적이다


위의 이미지에서의 A,B,C는 아래와 같다

A: *1 , B: *2 , C: *3



Fetch

원격 레포지토리의 브랜치들의 메타데이터를 가져온다 (원격 브랜치를 로컬에 가져오는게 아니라 원격 브랜치들의 최신 상태를 받아옴)

git fetch --all // 모든 원격 브랜치들의 최신 메타정보를 받아옴
git fetch origin 원격브랜치명 // 특정 원격 브랜치의 최신 메타정보를 받아옴
git checkout FETCH_HEAD // 「 git fetch origin 원격브랜치명 」 으로 가져온 경우, FETCH_HEAD에는 받아온 원격 브랜치 정보가 있다. 
그러므로 원격 브랜치의 최신 메타 정보를 git checkout FETCH_HEAD를 통하여 확인가능하다.
( = 「git checkout origin 정보를_받아온_원격브랜치명」 과 동일하다)

아래와 같은 사용이 가능하다 (git pull과 동일)

$ git fetch // 로컬 master 브렌치에 위치한 상태에서 최신 원격 master 브렌치의 메타 정보를 받아온다
$ git checkout FETCH_HEAD  // 받아온 원격 master 브렌치에 체크아웃한다
$ git log
$ git checkout master // 다시 로컬 master로 돌아온다
$ git merge FETCH_HEAD // fetch_head에 있는 최신 master정보를 로컬 master로 merge한다  


원격 레포지토리의 정보를 로컬의 레포지토리에 강제로 덮어쓰기

git reset --hard <원격레포지토리명>/<원격브랜치명>

// 예를 들면 아래와 같다
git reset --hard origin/master



이미지참조

https://qiita.com/matsubox/items/09904e4c51e6bc267990

Jun 1, 2023 Views 139