기존 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.