기존 Git 지점을 원격 지점으로 추적합니까?


3535

원격 지점을 추적하는 새 지점을 만드는 방법을 알고 있지만 기존 지점 트랙을 원격 지점으로 만드는 방법은 무엇입니까?

.git/config파일을 편집 할 수 있다는 것을 알고 있지만 더 쉬운 방법이 있어야합니다.


26
아래에 언급 된대로 기존 분기에 대해을 사용할 수 있습니다 git push -u origin branch-name.
Zags

3
로컬 지점이 현재 지점이고 로컬 지점이 아직 원격을 추적하지 않는 git pull경우 추적 정보를 설정하는 적절한 명령에 대한 유용한 메시지를 제공하는 경우가 많습니다.
billrichards

57
자식이 자식 문서에 대한 링크를 보여주기 위해 자식을 배우면 성가시다. 그 문서 는 git으로 무엇을하고 있는지 이미 알고있는 사람들을 위해 작성된 것으로 보입니다 .
Felipe Alvarez

9
Git 2.10부터는 먼저 로컬 브랜치를 체크 아웃 한 다음이를 수행해야합니다.git branch --set-upstream-to origin/<branch>
Mahdi Javaheri

2
--set-upstream오류가 발생 : fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.그래서 git branch --set-upstream-to origin/<branch name>작동 현재 명령입니다.
슈퍼 제이드

답변:


4268

지점 foo과 리모컨이 주어지면 upstream:

힘내 1.8.0 현재 :

git branch -u upstream/foo

또는 로컬 지점 foo이 현재 지점이 아닌 경우 :

git branch -u upstream/foo foo

또는 더 긴 명령을 입력하려면 위의 두 명령과 같습니다.

git branch --set-upstream-to=upstream/foo

git branch --set-upstream-to=upstream/foo foo

힘내 1.7.0 현재 :

git branch --set-upstream foo upstream/foo

노트:

  • 위의 모든 명령으로 인해 로컬 foo지점 foo은 원격에서 원격 지점 을 추적 upstream합니다.
  • 이전 (1.7.x) 구문은 새로운 (1.8+) 구문을 위해 사용되지 않습니다. 새로운 구문은보다 직관적이고 기억하기 쉽도록 고안되었습니다.
  • 아직 가져 오지 않은 새로 만든 리모컨에 대해 실행하면 업스트림 분기 정의가 실패합니다. 이 경우 git fetch upstream미리 실행하십시오 .

참조 : 왜 항상`--set-upstream`을해야합니까?


124
"업스트림"은 리모컨의 이름입니까? 즉, 기본적으로 "원산지"라고 부르는 것은 무엇입니까?
Andrew Vit

172
@ 앤드류 : 예. git branch --set-upstream master origin/master리포지토리를 처음 복제 할 때 자동으로 수행되는 것과 같습니다.
Dan Molding

62
관련 메모에서 이것을 gitconfig에 추가하는 것은 굉장합니다 : "[push] default = tracking"이렇게하면 푸시 (push)가 다음과 같은 위치로 이동합니다 :)
jpswain

61
"치명적인 : 유효한 개체 이름이 아닙니다 : 'origin / master'."

84
git push -u origin foo via

235

다음을 수행 할 수 있습니다 (마스터에서 체크 아웃하고 원격 지점 마스터로 푸시하려는 경우).

'원격'을 설정하지 않은 경우 설정하십시오.

git remote add origin ssh://...

이제 마스터가 다음을 추적하도록 구성하십시오.

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

그리고 밀어 :

git push origin master

실제로 리모컨과 푸시의 분기가 필요합니까? 체크 아웃 한 브랜치가 푸시하려는 브랜치가 아닌 경우에만 필요합니다.
Doppelganger

5
예. 그러나 메모리에서 첫 번째 푸시에 대해 명시 적이어야합니다. 물론 쉽게 테스트 할 수 있습니다 ... :)
Paul Hedderly

+1 이것은 1.8 이전의 msysgit "미리보기"를 고수 한 Windows 사용자를위한 답변입니다. 고마워
John

3
이것은 나를 위해 일한 유일한 대답입니다. 허용 된 답변을 시도했을 때 기존 지점의 업스트림 원격을 설정하기 위해 다음과 같은 결과를 얻었습니다 error: the requested upstream branch 'upstream/master' does not exist.
Steve K

4
당신의 상류가 호출되기 때문에 대부분의 @SteveK origin하지 upstream.
umläute

160

나는 -u옵션 을 밀어 넣는 부작용으로

$ git push -u origin branch-name

동등한 long 옵션은 --set-upstream입니다.

git-branch명령은 또한 이해 --set-upstream하지만 사용이 혼동 될 수 있습니다. 버전 1.8.0 은 인터페이스를 수정합니다.

git branch --set-upstream더 이상 사용되지 않으며 비교적 먼 미래에 제거 될 수 있습니다. git branch [-u|--set-upstream-to]건전한 논쟁의 순서로 소개되었습니다.

그것은 유혹적 git branch --set-upstream origin/master이지만 Git은 로컬 지점 "origin / master"를 현재 체크 아웃 된 지점과 통합하도록 사용자에게 정렬하도록 지시합니다. 이 옵션은 더 이상 사용되지 않습니다. 대신 새롭고 --set-upstream-to짧고 달콤한 -u옵션을 사용하십시오.

지역 foo지점이 있고 지점을 업스트림과 동일한 이름으로 처리하려고 한다고 가정하십시오 . 이런 일이 일어나게

$ git branch foo
$ git branch --set-upstream-to=origin/foo

아니면 그냥

$ git branch --set-upstream-to=origin/foo foo

1
이것은 훨씬 더 나은 솔루션입니다.
Nils_e

--set-upstream-to=...내가 찾던 것입니다.
Richard

54

git_remote_branch도구가 유용 할 수 있습니다 . 원격 지사 생성, 게시, 삭제, 추적 및 이름 바꾸기를위한 간단한 명령을 제공합니다. 좋은 기능 중 하나는 grb어떤 git 명령을 실행할 것인지 설명 하는 명령을 요청할 수 있다는 것입니다.

grb explain create my_branch github
# git_remote_branch version 0.3.0

# List of operations to do to create a new remote branch and track it locally:
git push github master:refs/heads/my_branch
git fetch github
git branch --track my_branch github/my_branch
git checkout my_branch

3
grb는 github에
mcabrams

6
OP는 Git 자체에 대해 질문하고 있습니다. 따라서 새로운 도구를 도입하지 않는 것이 좋습니다.
zeekvfu

grb는 내 macOS 설치에서 git-rebase의 별칭입니다. 나는 이것을하지 않았다 :)
Ben Sinclair

53

실제로 받아 들여진 대답이 작동하려면 :

git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa

로컬 지점은 이미 지점을 추적하고 있었으므로 원격 저장소가 이미 추가되었다고 가정 할 수 있습니다.
Doppelganger

Dopplerganger : 허용 된 답변에 대한 joachim의 의견을 참조하십시오. 어쨌든 가정은 쉽게 다를 수 있습니다-그것이 흥미로운 일이되게하는 것;)
Hedgehog

44

Git 1.5.x부터는 로컬 브랜치 $BRANCH트랙을 이와 같이 원격 브랜치로 만들 수 있다고 생각합니다 origin/$BRANCH.

점을 감안 $BRANCH하고 origin/$BRANCH존재하고, 현재 체크 아웃 된 적이 없다 $BRANCH(아래와 같은 경우 스위치), 수행

git branch -f --track $BRANCH origin/$BRANCH

이것은 $BRANCH추적 지점으로 다시 만듭니다 . -f힘에도 불구하고 창조 $BRANCH이미 존재. --track일반적인 기본값이있는 경우 선택 사항입니다 (즉, git-config 매개 변수 branch.autosetupmerge가 true 임).

origin/$BRANCH아직 존재하지 않는 경우 다음을 사용하여 로컬 $BRANCH을 원격 저장소로 푸시하여 작성할 수 있습니다 .

git push origin $BRANCH

로컬 지사를 추적 지사로 승격시키기 위해 이전 명령이 뒤 따릅니다.


1
git push origin $BRANCH내가 찾던 것이 었습니다.
사용자

위에서 설명한대로 업스트림 설정을 포함하여 모든 종류의 솔루션을 시도한 후에는 아무것도 작동하지 않았습니다. 내가 원했던 것은 원격 커밋에서 로컬 커밋으로 1 개의 새로운 커밋을 가져 오는 것 뿐이며 처음에는 추적을 설정하지 않았습니다. 명령 git branch -f --track $BRANCH origin/$BRANCH은 트릭을 수행합니다.
DemitryT

38

1- git fetch --all을 사용하여 로컬 메타 데이터를 업데이트하십시오.

여기에 이미지 설명을 입력하십시오

2- git branch -a를 사용하여 원격 및 로컬 브랜치를 표시합니다. 다음 스크린 샷을 참조하십시오.

여기에 이미지 설명을 입력하십시오

3- 리모컨과 연결하려는 대상 분기로 전환하십시오.

자식 체크 아웃 branchName

예 :

여기에 이미지 설명을 입력하십시오

4- 다음을 사용하여 로컬 지점을 원격 지점에 연결하십시오.

자식 브랜치-설정-업스트림-nameOfRemoteBranch

NB : nameOfRemoteBranch : 2 단계의 출력에서 ​​복사하기 "git branch -r"

사용 예 :

여기에 이미지 설명을 입력하십시오


1
대부분 쉽고 간단합니다.
vibs2006

25

다음을 실행하십시오.

git config push.default tracking

문제를 자유롭게 밀 수있는


1
이것은 편리 할 수 ​​있습니다. 그러나 git-config(1)매뉴얼 페이지 에 따르면의 tracking동의어가 사용되지 않습니다 upstream.
FooF

23

편집 .git/config은 아마도 가장 쉽고 빠른 방법 일 것입니다. 그것이 바로 원격 브랜치를 처리하기위한 Git 명령이하는 일입니다.

손으로 파일을 다루지 않으려는 경우 (그리고 그렇게 어렵지는 않습니다) 항상 사용할 git config수는 있지만 다시는 .git/config파일 을 편집하는 것 입니다.

물론 git checkout( --track예를 들어 플래그 를 전달 하여) 사용할 때 원격 지점을 자동으로 추적하는 방법이 있지만 이러한 명령은 기존 지점이 아닌 지점에서 작동 합니다.


18

아주 짧게

git branch --set-upstream yourLocalBranchName origin/develop

이렇게하면 yourLocalBranchName트랙이라는 원격 지점 이됩니다 develop.


1
@Quincy Check greg 's answer -use git push -u origin branch(or --set-upstream-to)
Tobias Kienzler

@MadNik의 차이 무엇 --set-upstream--track? 왜 다른 것을 사용해야하는지 잘 모르겠습니다.
Acumenus

15

1.6.x의 경우 git_remote_branch 도구를 사용하여 수행 할 수 있습니다 .

grb track foo upstream

Git이 foo추적 하게 됩니다 upstream/foo.


12

다음 명령을 사용합니다 (로컬 브랜치 이름은 "branch-name-local"이고 원격 브랜치 이름은 "branch-name-remote"임).

$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local

로컬 및 원격 분기의 이름이 동일한 경우 다음을 수행하십시오.

$ git branch --set-upstream-to=origin/branch-name branch-name

명령 행에서 "branch-name"및 "origin / branch-name"을 반대로했습니다. 상류는 지역보다 먼저 온다.
maharvey67

@ maharvey67 감사합니다. 답변을 수정했습니다.
yrazlik

이이었다 금, 당신은 지점 이름에 슬래시가있을 때 허용 대답에서 옵션 중 어느 것도 확인되지 않습니다도 있기 때문에, 감사합니다
JBoy

8

여기서 githuband를 사용하여 다음을 git version 2.1.4수행하십시오.

$ git clone git@github.com:user/repo.git

리모컨은 로컬로 연결되어 있지 않더라도 itelsef가 제공합니다.

$ git remote show origin

* remote origin
  Fetch URL: git@github.com:user/repo.git
  Push  URL: git@github.com:user/repo.git
  HEAD branch: master
  Remote branches:
    develop tracked         <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    master  tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

물론 현지 지점은 없습니다.

$ git branch
* master                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

보다? 이제 develp을 체크 아웃하면 마술이 자동으로 수행됩니다.

$ git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'

너무 쉽게!


요약. 이 두 명령을 실행하십시오.

$ git clone git@github.com:user/repo.git
$ git checkout develop

1
동일한 사용 사례의 훌륭한 예입니다. 로컬 '개발'분기의 흔적은 없지만, '개발'분기를 확인하면 해당 분기가 나타나고 원격 분기 '개발'을 원점에서 추적하도록 마술처럼 설정됩니다. 단계별 예제와 설명에 감사드립니다!
ElliotPsyIT

8

'--track'옵션 사용

  • git pull:

    git checkout --track <remote-branch-name>

  • 또는:

    git fetch && git checkout <branch-name>


7

새 브랜치를 만들려면 다음 명령을 사용할 수 있습니다

 git checkout --track -b 예제 origin / example 
이미 생성 된 브랜치를 원격에서 그 다음 브랜치간에 링크를 만들려면 아래 명령을 사용하십시오

 자식 분기 -u 원산지 / 원격 지점 이름


5

이것은이 질문에 대한 직접적인 대답은 아니지만 업스트림 브랜치를 구성하려고 할 때 나와 같은 문제가있는 사람을 위해 메모를 남기고 싶습니다.

push.default에 주의하십시오 .

이전 버전의 git 버전에서는 기본값이 일치하여 다음 과 같은 경우 매우 바람직하지 않은 동작이 발생합니다.

출발지 / 마스터에 대한 현지 지점 "마스터"추적

업스트림 / 마스터에 대한 원격 지사 "업스트림"추적

"upstream"브랜치에있을 때 "git push"를 시도하면 push.default일치하는 git은 자동으로 로컬 브랜치 "master"를 "upstream / master"로 병합하려고 시도하여 많은 혼란을 야기합니다.

이것은 더 건전한 행동을 제공합니다.

git config --global push.default 업스트림


당신은 이것을 헛되지 않았습니다. 감사.
stefgosselin

4

다소 관련이있는 방법으로 기존 지점에 원격 추적 분기를 추가하려고했지만 원격 추적 분기를 추가하려는 시스템의 원격 저장소에 액세스 할 수 없었습니다 (이 사본을 자주 내보내기 때문에) sneakernet을 통해 해당 원격으로 푸시 할 수있는 다른 시스템으로 리포지토리). 아직 가져 오지 않은 로컬에 원격 분기를 강제로 추가 할 수있는 방법이 없다는 것을 알았습니다 (따라서 로컬은 분기가 원격에 존재한다는 것을 알지 못했고 오류가 발생합니다 the requested upstream branch 'origin/remotebranchname' does not exist).

결국 나는 새로운 헤드 파일을 추가 한 .git/refs/remotes/origin/remotebranchname다음 시스템에서 원점에 액세스 할 수있는 시스템에서 참조를 복사하여 이전에 알려지지 않은 새로운 원격 브랜치를 (페치하지 않고) 추가 할 수있었습니다. 워크 스테이션에 리포지토리 (원격 지사를 추가 한 로컬 리포지토리 포함).

일단 완료되면 사용할 수 있습니다. git branch --set-upstream-to=origin/remotebranchname


3

또는 단순히 :

지점이 아닌 경우 지점으로 전환하십시오.

[za]$ git checkout branch_name

운영

[za]$ git branch --set-upstream origin branch_name
Branch origin set up to track local branch brnach_name by rebasing.

그리고 당신은 준비 :

 [za]$ git push origin branch_name

alawys는 구성 파일을 살펴보고 다음을 실행하여 무엇을 추적하고 있는지 확인할 수 있습니다.

 [za]$ git config -e

또한 어떤 분기가 추적되고 어떤 분기가 추적되지 않는지를 보여줍니다. :

  [za]$ git remote show origin 

0

나와 같은 로컬 지점 이름을 원격 지점 이름과 동기화하려는 사람에게는 다음과 같은 편리한 명령이 있습니다.

git branch -u origin/$(git rev-parse --abbrev-ref HEAD)

0

메시지를받을 때마다 수행해야 할 작업을 기억하지 않으 려면 다음을 수행하십시오.

병합하려는 지점을 지정하십시오. 자세한 내용은 git-pull (1)
을 참조하십시오.
.....

다음 스크립트를 사용하여 현재 분기오리진을 업스트림으로 설정할 수 있습니다 .

필자의 경우 나는 origin 이외의 것을 기본 업스트림 으로 설정 하지 않았다 . 또한 거의 항상 로컬 및 원격 지점에 대해 동일한 지점 이름을 유지합니다. 따라서 다음이 나에게 적합합니다.

#!/bin/bash
# scriptname: git-branch-set-originupstream
current_branch="$(git branch | grep -oP '(?<=^\* )(.*)$')"
upstream="origin/$current_branch"
git branch -u "$upstream"

-1

이것도 작동합니다

git branch --set-upstream-to=/< remote>/< branch> < localbranch>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.