왜 git branch --up-stream을 복구하기 위해 호출합니까?
저는 그것의 고급 운영에 관해서는 초보자에 가깝습니다.저는 블로그 프레임워크 Octopress를 사용하여 블로그를 관리합니다.옥토프레스는 2011년 이후로 어떠한 개발도 진행하고 있지 않지만, 제 목적에 잘 부합하기 때문에 저는 지금까지 아무것도 바꿀 생각이 없습니다.
참고로, 제 블로그는 Github Pages에서 호스팅됩니다.
오늘게, 새운을작업동안는하물시로,,▁working동안▁today▁a▁on▁post▁new,,는,git status
가 표시되었습니다.
On branch source
Your branch is based on 'origin/master', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
가 모든 됩니다. 예를 하십시오.git add .
,git commit -m 'message'
그리고.git push origin source
.
- 메시지의 의미는 무엇입니까?
- 뭔가 고장이 났습니까?
- 만약 그렇다면, 뭐?
- 고쳐야 하나요?
가능하다면 pdf/web 기사를 참조하여 이에 대해 자세히 읽고 나중에 이해할 수 있도록 해주시기 바랍니다.
자세한 정보:
bash-3.2$ git branch -a
* source
remotes/octopress/2.1
remotes/octopress/HEAD -> octopress/master
remotes/octopress/gh-pages
remotes/octopress/linklog
remotes/octopress/master
remotes/octopress/refactor_with_tests
remotes/octopress/rubygemcli
remotes/octopress/site
remotes/origin/source
더 많은 정보가 필요하면 알려주시기 바랍니다.감사해요.
버전: 브랜치 TL;DR 버전: 원격 추적 브랜치origin/master
예전에는 존재했지만 지금은 존재하지 않기 때문에 로컬 지점source
는 존재하지 않는 것을 추적하고 있으며, 이는 기껏해야 의심스러운 것입니다. 즉, 다른 Git 기능이 사용자를 위해 아무것도 할 수 없다는 것을 의미합니다. Git는 이에 대해 경고합니다.귀하는 "업스트림 추적" 기능이 의도한 대로 작동하지 않고 잘 지내고 있으므로, 변경 여부는 귀하에게 달려 있습니다.
업스트림 설정에 대한 다른 방법은 "git push --setupstream origin <branch>"를 참조하십시오.
이 경고는 Git 1.8.5에서 처음 나타나는 Git의 새로운 경고입니다.릴리스 정보에는 다음과 같은 짧은 항목이 포함되어 있습니다.
- "git branch -v-v"(및 "git status")는 다른 분기를 기반으로 하지 않는 분기, 해당 업스트림 분기와 동기화된 분기, 더 이상 존재하지 않는 업스트림 분기로 구성된 분기를 구분하지 않았습니다.
의미를 설명하려면 먼저 "원격", "원격 추적 분기" 및 Git가 "업스트림 추적"을 처리하는 방법에 대해 알아야 합니다. (원격 추적 분기는 매우 결함이 있는 용어입니다.대신 원격 추적 이름을 사용하기 시작했는데, 약간 개선된 것 같습니다.하지만 아래에서는 Git 문서와의 일관성을 위해 "원격 추적 분기"를 사용할 것입니다.
의 "각의리 " 트모는 " 순각단 " 히입이 "처럼 입니다. 예를 들면,origin
또는octopress
이 경우에는그들의 목적은 당신이 시작한 장소의 전체 URL과 같은 것들을 기록하는 것입니다.git fetch
또는git pull
업데이트합니다.를 할 때git fetch remote,
1 Git는 저장된 URL을 사용하여 해당 원격으로 이동하여 적절한 업데이트 집합을 가져옵니다.또한 "원격 추적 분기"를 사용하여 업데이트를 기록합니다.
"원격 추적 분기"(또는 원격 추적 이름)는 단순히 "원격"에서 마지막으로 볼 수 있는 분기 이름을 기록하는 것입니다.각 원격은 Git 저장소이기 때문에 분기가 있습니다.원격 "오리진"의 분기는 로컬 저장소에 다음과 같이 기록됩니다.remotes/origin/
당이보문자그는라는 이름의 이 있다고 나와 .source
origin
및이이지가지라는 이름의 .2.1
,linklog
ㅠㅠoctopress
.
(물론 "일반" 또는 "로컬" 분기는 사용자 자신의 리포지토리에 만든 분기 이름일 뿐입니다.
마지막으로 "원격 추적 분기"를 "추적"하도록 (로컬) 분기를 설정할 수 있습니다.로컬 분기가 원격 추적 분기를 추적하도록 설정되면 Git는 "업스트림"을 호출하고 사용자가 (커밋 측면에서) 업스트림의 "앞" 또는 "뒤"인지 여부를 알려줍니다.로컬 분기와 원격 추적 분기가 동일한 이름(원격 접두사 부분 제외)을 사용하는 것이 일반적입니다(심지어 권장 가능).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종합하면, 이것은 Git에게 당신의 지점이source
에서는 "검색 지점"인 "원격 을 합니다.origin/master
.
하지만 이제 다음과 같은 결과를 보십시오.git branch -a
저장소에 있는 모든 로컬 및 원격 검색 지점 이름을 표시합니다.은 원격추이같습다니다음과름 아래에 .remotes/
그리고 없어요. 아마 한때는 있었을 거예요. 하지만 지금은 없어요.
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하면), 그것("source", "source", "source").origin/source
원하는 업스트림입니다. 실제로 어떤 업스트림을 원하는지 알 수 있는 방법은 없습니다.
(참고 항목기존 Git 분기 추적을 원격 분기로 만드는 방법)
제 생각에 당신이 여기 온 방법은 당신이 처음 했을 때입니다.git clone
이 복제한 .master
당신은 또한 지점을 가지고 있었습니다.master
된▁was▁▁to▁which설을 추적하기 위해 설정되었습니다.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
이제는 틀렸습니다.
이 시점에서 "업스트림" 연결이 끊어졌지만 Git 버전 1.8.5보다 이전 버전에서는 Git이 끊어진 설정을 전혀 눈치채지 못했습니다.이제 1.8.5가 나왔으니 이를 지적하는 것입니다.
여기에는 대부분의 질문이 포함되지만 "고쳐야 합니까?"에 대한 질문은 포함되지 않습니다.당신은 몇 년 동안 부서진 상태를 피해 일을 해왔을 가능성이 높습니다.git pull remote branch
(계속):git pull origin source
) 계속 그러면 문제가 해결되므로 문제를 해결할 필요가 없습니다.원한다면, 당신은 사용할 수 있습니다.--unset-upstream
사항을 지점이 .source
상류에 있는 것으로 표시됩니다.
업스트림이 있는 이유는 다양한 작업을 더욱 편리하게 하는 것입니다.를 들면 예를들어들.git fetch
에 뒤에git merge
업스트림이 올바르게 설정된 경우 일반적으로 "올바른 작업"을 수행합니다.git status
나고끝 git fetch
사용자의 보고서가 해당 분기의 업스트림 보고서와 일치하는지 여부를 알려줍니다.
편리함을 원한다면 업스트림을 재설정합니다.
1git pull
사용하다git fetch
Git 1.8.4 기준으로, 이것(마침내!) 또한 "원격 추적 분기" 정보를 업데이트합니다.으로 원격 추적 분기에 가 기록되지 .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
사용자가 직접 수동으로 수행하도록 하는 대신 원하는 작업을 설명하므로 "더 나은 방법"입니다.
Torrek의 대답은 아마도 완벽할 것이지만, 저는 단지 기록이 원래 질문에 설명된 것과 다른 다른 경우를 언급하기를 원했을 뿐이지만 동일한 오류가 나타날 수 있습니다(비슷한 문제를 가진 다른 사람들에게 도움이 될 수 있기 때문에).
▁empty를 사용하여 빈(을 만들었습니다.git init --bare
내 서버 중 하나에서. 저는 그럼저가 있습니다.git clone
공간으로 합니다. 의 PC 로 작 공 편 합 니 집 다 에 간 내
로컬 보고서에 단일 버전을 커밋한 후 전화를 걸면 해당 오류가 발생합니다.git status
.
Torrek의 답변에 따라, 저는 무슨 일이 일어났는지 이해합니다. 첫 번째 커밋은 로컬 작업 디렉토리 repo에 "master" 브랜치를 만들었습니다.그러나 원격 repo(서버)에는 아무것도 없었기 때문에 "master"(원격/오리진/마스터) 브랜치도 없었습니다.
를 한 후git push origin master
로컬 레포에서 원격 레포에 마스터 브랜치가 생겼습니다.이렇게 하면 오류가 나타나지 않습니다.
결론적으로, "마스터"를 포함한 분기가 없기 때문에 커밋이 0인 새로운 원격 레포에 대해 이러한 오류가 발생할 수 있습니다.
이것이 당신의 문제를 해결할 수도 있습니다.
변경을 수행한 후 커밋할 수 있습니다.
git remote add origin https://(address of your repo) it can be https or ssh
then
git push -u origin master
당신에게 효과가 있기를 바랍니다.
감사해요.
나를 위해..git/refs/origin/master
부패했습니다.
저는 다음과 같이 했고, 그것이 저를 위해 문제를 해결했습니다.
rm .git/refs/remotes/origin/master
git fetch
git branch --set-upstream-to=origin/master
사실 토렉은 이미 제가 할 수 있는 것보다 훨씬 더 잘 도구를 사용하는 방법을 알려주었습니다.하지만 이 경우 http://octopress.org/docs/deploying/github/ 의 지침을 따르면 특이한 점을 지적하는 것이 중요하다고 생각합니다.즉, 설정에 여러 개의 Github 저장소가 있게 됩니다.우선 당신의 웹사이트에 대한 모든 소스 코드를 가지고 있는 것은 디렉토리입니다.$WEBSITE
이 적으로 파있일은에 것.$WEBSITE/_deploy
이 설정의 재미있는 점은 다음과 같은 것이 있다는 것입니다..gitignore
에 파일을 합니다.$WEBSITE
이 설정이 실제로 작동하도록 디렉터리를 지정합니다.
소개는 충분합니다.는 이경오의저발수있생할다습니의 할 수 ._deploy
.
cd _deploy
git branch -a
* master
remotes/origin/master
remotes/origin/source
.git/config
일반적으로 다음과 같은 것을 찾아야 합니다.
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@github.com:yourname/yourname.github.io.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
그러나 당신의 경우에는 지점 마스터에 리모컨이 없습니다.
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@github.com:yourname/yourname.github.io.git
fetch = +refs/heads/*:refs/remotes/origin/*
다음을 통해 해결할 수 있습니다.
cd _deploy
git branch --set-upstream-to=origin/master
이 여러분에게 것과 만, 은 아마도 잘 이 있을 입니다. 하지만 이것은 매우 중요한 것일 수도 있습니다._deploy
웹 사이트의 루트가 아닌 디렉터리입니다.
PS: 다음과 같은 셸을 사용할 가치가 있을 수 있습니다.zsh
git
앞으로 이 물건에 물리지 않도록 플러그인.그것은 즉시 그것을 보여줄 것입니다._deploy
다른 리포지토리와 관련이 있습니다.
저는 이 질문을 두 번 했는데, 항상 제 지역 지점의 git cache 파일이 손상되어 발생했습니다.누락된 커밋 해시를 파일에 기록하여 수정했습니다.서버에서 올바른 커밋 해시를 가져와 로컬에서 다음 명령을 실행했습니다.
cat .git/refs/remotes/origin/feature/mybranch \
echo 1edf9668426de67ab764af138a98342787dc87fe \
>> .git/refs/remotes/origin/feature/mybranch
문제: 지점이 '오리진/마스터'를 기반으로 하지만 업스트림이 사라졌습니다.
솔루션: git branch --unset-upstream
언급URL : https://stackoverflow.com/questions/21609781/why-call-git-branch-unset-upstream-to-fixup
'source' 카테고리의 다른 글
각진 재료 날짜에 대한 기본값 설정 각진 5가 있는 피커 (0) | 2023.06.25 |
---|---|
Git가 자동으로 공백과 탭 사이를 전환할 수 있습니까? (0) | 2023.06.20 |
Ruby에서 안전한 정수 구문 분석 (0) | 2023.06.20 |
ASP.NET 웹 API를 사용하여 이미지를 반환하는 권장 방법이 있습니까? (0) | 2023.06.20 |
Gradle 캐시를 지우는 방법은 무엇입니까? (0) | 2023.06.20 |