기존 Git 분기가 원격 분기를 추적하도록 하시겠습니까?
-
21-08-2019 - |
문제
원격 지점을 추적하는 새 지점을 만드는 방법을 알고 있지만 기존 지점을 원격 지점으로 추적하려면 어떻게 해야 합니까?
그냥 편집할 수 있다는 걸 알아요 .git/config
파일이지만 더 쉬운 방법이 있어야 할 것 같습니다.
해결책
지점이 주어졌습니다 foo
그리고 리모컨 upstream
:
GIT 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
GIT 1.7.0 기준 :
git branch --set-upstream foo upstream/foo
메모:
- 위의 모든 명령은 로컬 브랜치를 유발합니다
foo
원격 브랜치를 추적합니다foo
리모컨에서upstream
. - 기존 (1.7.x) 구문은 새로운 (1.8+) 구문에 찬성하여 더 이상 사용되지 않습니다. 새로운 구문은보다 직관적이고 기억하기 쉽습니다.
- 업스트림을 정의하면 새로 만들어지지 않은 리모컨으로 실패합니다. 이 경우 실행됩니다
git fetch upstream
미리.
또한보십시오: 왜 항상`-set-upstream`을해야합니까?
다른 팁
다음을 수행 할 수 있습니다 (마스터에서 체크 아웃하고 원격 지점 마스터로 밀고 싶다고 가정) :
이미 없으면 '원격'을 설정하십시오.
git remote add origin ssh://...
이제 마스터를 추적 할 수 있도록 구성하십시오.
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
푸시 :
git push origin master
나는 이것을 -u
옵션에서 옵션
$ git push -u origin branch-name
동등한 긴 옵션은입니다 --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
당신은 찾을 수 있습니다 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
실제로 인정 된 답변은 작업에 대해 :
git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa
나는 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
사실이다).
if origin/$BRANCH
아직 존재하지 않으므로 로컬을 밀어서 만들 수 있습니다. $BRANCH
다음과 같은 원격 저장소로
git push origin $BRANCH
이어서 이전 명령이 이어지어 로컬 브랜치를 추적 지점으로 홍보합니다.
1- 다음을 사용하여 로컬 메타데이터를 업데이트합니다. git fetch --all
2- 다음을 사용하여 원격 및 로컬 지점을 표시합니다. 자식 브랜치 -a, 다음 스크린샷을 참조하세요.
3- 원격과 연결하려는 대상 지점으로 전환하십시오.사용하여
자식 체크아웃 지점 이름
예 :
4- 다음을 사용하여 로컬 지점을 원격 지점에 연결합니다.
git Branch --set-upstream-to nameOfRemoteBranch
참고: nameOfRemoteBranch :2단계 " git Branch -r "의 출력에서 복사합니다.
사용 예:
실행하십시오 :
git config push.default tracking
문제를 해결할 수 있습니다
편집 .git/config
아마도 가장 쉽고 빠른 방법 일 것입니다. 그것이 원격 브랜치를 처리하기위한 GIT 명령이 어쨌든 수행하는 일입니다.
손으로 파일을 뭉치지 않으려면 (그리고 그렇게하기가 어렵지는 않다면) 언제든지 사용할 수 있습니다. git config
그렇게하려면 ... 그러나 다시, 그것은 단지 편집 할 것입니다. .git/config
어쨌든 파일.
물론 사용할 때 원격 브랜치를 자동으로 추적하는 방법이 있습니다. git checkout
(전달함으로써 --track
예를 들어 플래그)이지만 이러한 명령은 새로운 기존의 지점이 아닙니다.
아주 짧게
git branch --set-upstream yourLocalBranchName origin/develop
이것은 당신을 만들 것입니다 yourLocalBranchName
호출 된 원격 브랜치를 추적합니다 develop
.
1.6.x의 경우,이를 사용하여 수행 할 수 있습니다 git_remote_branch 도구:
grb track foo upstream
그것은 git가 만들어 질 것입니다 foo
길 upstream/foo
.
다음 명령을 사용합니다 (귀하의 로컬 브랜치 이름이 "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
여기, 사용 github
그리고 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 만 확인하면 자동으로 Magic을 수행합니다.
$ 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
'-트랙'옵션을 사용하십시오
후
git pull
:git checkout --track <remote-branch-name>
또는:
git fetch && git checkout <branch-name>
새 지점을 만들려면 다음 명령을 사용할 수 있습니다.
git checkout --track -b example origin/example이미 생성 된 분기가 리모컨 사이의 링크를 생성하려면 해당 지점에서 아래 명령을 사용합니다.
git branch -u origin/remote-branch-name
이것은이 질문에 대한 직접적인 답이 아니지만 업스트림 브랜치를 구성하려고 할 때 나와 같은 문제를 겪을 수있는 사람을 위해 여기에 메모를 남기고 싶었습니다.
조심하십시오 push.default.
오래된 git 버전의 경우 기본값이있었습니다 어울리는, 예를 들어 다음과 같은 경우 매우 바람직하지 않은 행동을 유발합니다.
로컬 브랜치 "마스터"원산지/마스터로 추적
원격 브랜치 "업스트림"상류/마스터로 추적
"상류"지점에있을 때 "git push"를 시도한 경우 푸시 .default 매칭 Git은 자동으로 현지 지점 "마스터"를 "업스트림/마스터"로 병합하여 많은 혼란을 일으 킵니다.
이것은 더 세대한 행동을 제공합니다.
git config -global push.default 상류
다소 관련된 방식으로 기존 추적 브랜치를 기존 브랜치에 추가하려고했지만 해당 원격 추적 브랜치를 추가하고 싶었던 시스템의 원격 저장소에 액세스 할 수 없었습니다 (이 사본을 자주 내보내기 때문에 리모컨을 통해 해당 리모컨으로 푸시 할 수있는 다른 시스템으로 리베로하십시오). 나는 아직 가져 오지 않은 로컬에 원격 브랜치를 추가 할 수있는 방법이 없다는 것을 알았습니다. the requested upstream branch 'origin/remotebranchname' does not exist
).
결국 나는 새 헤드 파일을 추가하여 이전에 알려지지 않은 새로운 원격 브랜치 (페치없이)를 추가했습니다. .git/refs/remotes/origin/remotebranchname
그런 다음 Ref를 복사합니다 (시선은 가장 빠르고 절름발이가되었습니다.
일단 완료되면 사용할 수있었습니다 git branch --set-upstream-to=origin/remotebranchname
또는 간단히 :
이미 있지 않은 경우 지점으로 전환하십시오.
[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
나처럼 원격 브랜치 이름으로 로컬 브랜치 이름을 동기화하려는 사람이라면 다음은 편리한 명령입니다.
git branch -u origin/$(git rev-parse --abbrev-ref HEAD)
이것도 효과가있을 것입니다
git branch --set-upstream-to=/< remote>/< branch> < localbranch>