Github : 업스트림 분기를 포크로 가져 오기


169

github origin의 프로젝트 ( upstream) 에서 포크 ( )가 있습니다 . 이제 업스트림 프로젝트에 새 분기가 추가되었습니다. 포크로 가져오고 싶습니다. 어떻게합니까?

원격을 확인하고 그 위에 분기를 만들려고했지만 지점으로 git push푸시하려는 방식으로 분기를 구성 합니다 upstream.

git checkout upstream/branch
git checkout -b branch

편집하다

어쩌면 명확하지 않았다,하지만 난에 밀어 수 있도록 내 로컬 저장소에 지점을 추가 할 것을 origin(내 포크)를 통해 git push. 업스트림 리포지토리는 일반적으로 읽기 전용이므로 기여하기 위해 분기합니다.

따라서 기본적으로 존재하지 않는 지점에서 origin내용을 가져 오는 체크 아웃하고 싶습니다 upstream.

답변:


262
  1. 새로운 상류 지점을 로컬 리포지토리 로 가져 왔는지 확인하십시오 .

    • 먼저 작업 트리가 깨끗한 지 확인하십시오 (변경 사항을 커밋 / 보관 / 되돌리기)
    • 그런 다음 git fetch upstream새 업스트림 분기를 검색하려면
  2. 새 업스트림 분기 ( newbranch) 의 로컬 버전 을 작성하고 전환하십시오 .

    • git checkout -b newbranch upstream/newbranch
  3. 새 분기를 원점 으로 푸시 할 준비가되면 다음을 수행하십시오 .

    • git push -u origin newbranch

-u 지정된 원격으로 추적 업 스위치 세트 (이 예에서 origin)


6
git fetch upstream에 대해 더 git pull upstream많은 작업을 수행해야하므로 첫 단계에서 더 나은 옵션 이라고 생각 git remote add ...합니다 upstream.
Alexander Pavlov

git pull upstream returns : You asked to pull from the remote 'upstream', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line.명령 끝에 분기 이름을 추가하면 새 로컬 분기를 만들지 않고 업스트림의 분기와 현재 로컬 분기를 병합합니다. 어떤 아이디어?
mMontu

1
교체 git pull upstreamgit fetch upstream해결 문제, 다음과 같은 단계를했다.
mMontu

치명적 : 경로를 업데이트 할 수없고 '업스트림'분기로 동시에 전환 할 수 없습니다. 커밋으로 해결할 수없는 '업스트림 / 마스터'를 체크 아웃 하시겠습니까?
sureshvv

1
@sureshvv 아마도 업스트림이라는 업스트림 저장소에 대한 원격 참조가 있어야하기 때문일 것 입니다. 그렇지 않은 경우 git remote add upstream your_git_upstream_repository_url.git 을 추가하는 방법 입니다. 그 문제에 대한 설명이 필요하면 이것을 읽으십시오 .
Gabriel Rainha

7

나는 사용할 것이다

git checkout -b <new_branch> upstream/<new_branch>

그것은 실제로 제가 질문에서 설명하기 전에 시도한 것입니다. 같은 결과가 나옵니다.
찌르다

4

나도 이것에 문제가 있었고 구글이 나를 데려 갔다. 그러나 솔루션이 작동하지 않았습니다. 내 문제는 업스트림을 추가 할 때 모든 분기가 아닌 마스터 만 가져 오도록 git 구성을 설정한다는 것입니다. 예를 들면 다음과 같습니다

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/master:refs/remotes/upstream/master

다음과 같이 .git / config를 편집하면 문제가 해결되었습니다.

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/*:refs/remotes/upstream/*

1

다음 단계는 나를 위해 잘 작동했습니다 (상류 지점 이름이이라고 가정 branch).

$ git fetch upstream
$ git checkout branch
$ git push origin

1
git fetch upstream fatal : 'upstream'은 git repository 치명적인 것으로 보이지 않습니다. 원격 저장소에서 읽을 수 없습니다. 올바른 액세스 권한이 있고 저장소가 존재하는지 확인하십시오.
ThinkDigital

0

--track?

git branch --track branch upstream/branch

어쩌면 나는 당신을 잘못 이해했지만, 그렇게하면 같은 방식으로 지점을 설정할 것입니다. 에 pushpusing으로 upstream.
찌를

아뇨, 당신을 오해 한 것 같아요
troelskn

0

나는 upstream(정식 저장소에서) 내 포크에 이미 정의되어 있지만 다른 포크에서 지점을 체크 아웃 해야하는 약간 더 복잡한 시나리오가있었습니다 . 이를 수행하기 위해 프로세스는 약간 다릅니다. 내가 끝내는 구성은 다음과 같습니다.

[remote "origin"]
url = git@github.com:<your_user/org>/<repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "upstream"]
url = git@github.com:<upstream_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[remote "other_user"]
url = git@github.com:<other_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/<other_user>/*

이제 <other_user>포크 에서 지점을 체크 아웃 할 수 있습니다.

git fetch <other_user> <branch>
git checkout -b <branch> <other_user>/<branch>

그러면 포크에서 파생 된 로컬 지점이 제공됩니다.

해당 지역 지점을 푸시하려면 푸시 명령을 구체적으로 지정해야했습니다.

git push origin <branch>

그것은 당신이 가져 오는 리모트가“업스트림”이라고 부르지 않는다는 것만으로 받아 들여진 대답과 거의 같습니다.
찌르다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.