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 upstream로 git 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.