TL; DR 버전 : 원격 추적 브랜치 origin/master
가 존재했지만 지금은 존재하지 않기 때문에 로컬 브랜치 source
는 존재하지 않는 것을 추적하고 있습니다. 이는 의심스러운 것입니다. 즉, 다른 Git 기능이 사용자를 위해 아무것도 할 수 없음을 의미합니다. 힘내가 그것에 대해 경고하고 있습니다. "업스트림 추적"기능이 의도 한대로 작동하지 않아도 제대로 작동하므로 변경 여부는 사용자에게 달려 있습니다.
업스트림 설정에 대한 또 다른 방법은 "git push --set-upstream origin <branch>"를 사용해야하는 이유는 무엇입니까?를 참조하십시오 .
이 경고는 Git의 새로운 기능으로 Git 1.8.5에서 처음 나타납니다. 릴리스 노트에는 다음과 같은 간단한 글 머리 기호 항목이 포함되어 있습니다.
- "git branch -v -v"(및 "git status")는 다른 분기를 기반으로하지 않는 분기, 업스트림 분기와 동기화 된 분기 및 업스트림으로 구성된 분기를 구분하지 않았습니다. 더 이상 존재하지 않는 지점.
이것이 의미하는 바를 설명하려면 먼저 "원격", "원격 추적 지점"및 Git이 "상류 추적"을 처리하는 방법에 대해 알아야합니다. ( 원격 추적 지점 은 끔찍한 용어입니다. 대신 원격 추적 이름을 사용하기 시작 했는데 약간 개선 된 것 같습니다. 아래에서는 Git 문서와의 일관성을 위해 "원격 추적 지점"을 사용합니다. )
각각은 "원격"처럼 단순히 이름 origin
이나 octopress
이 경우. 그들의 목적은 귀하 git fetch
또는 git pull
업데이트 된 장소의 전체 URL과 같은 것을 기록하는 것 입니다. 당신이 사용하는 경우 1 힘내는 원격 (저장된 URL을 사용하여)로 이동 및 업데이트의 적절한 설정을 통해 제공합니다. 또한 "원격 추적 분기"를 사용하여 업데이트를 기록 합니다.git fetch remote,
"원격 추적 지점"(또는 원격 추적 이름)은 일부 "원격"에서 마지막으로 본 지점 이름의 기록입니다. 각 리모컨 자체는 Git 저장소이므로 분기가 있습니다. 원격 "원점"의 지점은 아래의 로컬 저장소에 기록됩니다 remotes/origin/
. 당신이 보여 텍스트가있다라는 이름의 브랜치 있다고 말한다 source
에 origin
, 그리고 가지라는 이름의 2.1
, linklog
, 등등에 octopress
.
물론 "일반"또는 "로컬"브랜치는 자체 저장소에서 만든 브랜치 이름 일뿐입니다.
마지막으로 "원격 추적 지점"을 "추적"하도록 (로컬) 지점을 설정할 수 있습니다. 로컬 브랜치 L
가 원격 추적 브랜치를 추적하도록 설정 되면 R
Git은 R
"업스트림"을 호출 하고 커밋 측면에서 업스트림을 "앞으로"그리고 / 또는 "뒤에"있는지 알려줍니다. 그것은의 정상 (심지어 추천-수) 현지 지사와 (원격 접두사 부분을 제외하고) 같은 이름을 사용하는 지점을 원격 추적 등에 source
와 origin/source
실제로 필요한 아니지만.
그리고이 경우에는 일어나지 않습니다. source
원격 추적 지점을 추적 하는 로컬 지점이 origin/master
있습니다.
Git이 원격 지점을 추적하기 위해 로컬 지점을 설정 하는 방법에 대한 정확한 메커니즘을 알아야 할 필요 는 없지만 아래에서 관련이 있으므로 이것이 어떻게 작동하는지 보여 드리겠습니다. 현지 지사 이름 ()으로 시작합니다 source
. 이 이름을 사용하는 철자 branch.source.remote
와 철자 두 개의 구성 항목이 branch.source.merge
있습니다. 당신이 보여준 결과에서, 그것들이 모두 설정되어 있음을 분명히 알 수 있으므로 주어진 명령을 실행하면 다음을 볼 수 있습니다 :
$ git config --get branch.source.remote
origin
$ git config --get branch.source.merge
refs/heads/master
이것들을 종합하면, 2 이것은 당신의 브랜치가 source
"원격 추적 브랜치"를 추적 한다는 것을 Git에 알려준다 origin/master
.
그러나 이제의 출력을 보면 git branch -a
저장소의 모든 로컬 및 원격 추적 분기 이름이 표시됩니다. 원격 추적 이름은 remotes/
... 아래에 나열되며이 없습니다remotes/origin/master
. 아마 한 번에 있었지만 지금은 사라졌습니다.
Git은으로 추적 정보를 제거 할 수 있다고 알려줍니다 --unset-upstream
. 이것은 모두 지울 것입니다 branch.source.origin
및 branch.source.merge
및 경고를 중지합니다.
당신이 원하는,하지만,하는 것입니다 상당히 것으로 보인다 전환 추적에서 origin/master
다른 것을 추적에 : 아마 origin/source
,하지만 어쩌면 하나 octopress/
의 이름.
당신이 할 수있는 git branch --set-upstream-to
, 3 예를 :
$ git branch --set-upstream-to=origin/source
(여전히 "source"브랜치에 있고 그것이 origin/source
원하는 업스트림 이라고 가정하면 , 실제로 어떤 것을 원하는지 알 수있는 방법이 없습니다).
( 기존 Git 지점을 원격 지점으로 추적하는 방법을 참조하십시오 . )
나는 당신이 여기에 도착한 방법은 당신이 처음했을 때 git clone
복제 한 것이 가지 를 가지고 있다고 생각합니다 master
. 또한 master
추적하도록 설정된 branch 가 있습니다 origin/master
(git의 일반적인 표준 설정입니다). 이것은 당신이 의미했다 branch.master.remote
및 branch.master.merge
설정에 origin
와 refs/heads/master
. 그러나 origin
리모컨의 이름이에서 (으) master
로 변경되었습니다 source
. 일치하도록 지역 이름을에서 (으) master
로 변경했다고 생각합니다 source
. 이 변경된 이름 에서, 설정의 branch.master.remote
에 branch.source.remote
과에서 branch.master.merge
에 branch.source.merge
...하지만 기존의 왼쪽 값을 그래서, branch.source.merge
지금은 틀렸다.
이 시점에서 "업스트림"연결이 끊어졌지만 1.8.5 이전의 Git 버전에서는 Git이 깨진 설정을 전혀 알아 차리지 못했습니다. 이제 1.8.5가 있으므로 이것을 지적하고 있습니다.
여기에는 대부분의 질문이 포함되어 있지만 "수정해야하는"질문은 아닙니다. (예 :)를 수행하여 현재 몇 년 동안 고장을 해결 한 것 같습니다 . 계속 그렇게하면 문제가 계속 해결되므로 문제 를 해결할 필요 가 없습니다 . 원하는 경우 업스트림을 제거하고 불만을 중지하고 로컬 지점에 업스트림 이 있는 것으로 표시 하지 않도록 사용할 수 있습니다 .git pull remote branch
git pull origin source
--unset-upstream
source
업스트림의 요점은 다양한 작업을보다 편리하게 만드는 것입니다. 예를 들어, git fetch
다음 git merge
업스트림가 올바르게 설정되어있는 경우 일반적으로 "옳은 일을 할"것, 그리고 git status
후에는 git fetch
당신의 repo는 해당 분기를 들어, 업스트림 하나와 일치 여부를 알려줍니다.
편의를 원하면 업스트림을 다시 설정하십시오.
1git pull
은을 사용하며 git fetch
, Git 1.8.4부터는 (최종!) "원격 추적 지점"정보도 업데이트합니다. 이전 버전의 Git git pull
에서는으로 만 원격 추적 분기에 업데이트가 기록되지 않았습니다 git fetch
. Git은 버전 1.8.5 이상이어야하므로 이것은 문제가되지 않습니다.
2 글쎄, 이것은 아래에있는 구성 라인을 고의로 무시하고 remote.origin.fetch
있습니다. Git은 "병합"이름을 매핑하여 원격 지점의 전체 로컬 이름이임을 확인해야합니다 refs/remotes/origin/master
. 매핑은 거의 항상 이와 같이 작동하므로 예측할 master
수 origin/master
있습니다.
3 또는,와 git config
. 당신은 단지 상류 설정하려는 경우 origin/source
변화가에있는 유일한 부분 branch.source.merge
, 그리고 git config branch.source.merge refs/heads/source
그것을 할 것입니다. 그러나 --set-upstream-to
말한다 무엇을 하는가 "더 나은 방법"그래서 당신이 아니라 당신이 수동으로 그것을 스스로 할 가서 만드는 것보다 수행합니다.