Git 에서 원격 브랜치 추적을 어떻게 중지 합니까?
구체적인 경우에는 로컬 브랜치를 삭제하고 싶지만 원격 브랜치는 삭제하지 않기 때문에 추적을 중지하고 싶습니다. 로컬 항목을 삭제하고 삭제를 원격으로 푸시하면 원격 분기도 삭제됩니다.
방금 할 수 git branch -d the_branch
있으며 나중에 다시 전파되지 git push
않습니까?
git push origin :the_branch
나중에 뛰어야 만 전파 됩니까?
답변
Yoshua Wuyts 의 답변 에서 언급했듯이 다음을 사용합니다 git branch
.
git branch --unset-upstream
다른 옵션:
로컬 지점을 삭제할 필요는 없습니다.
원격 지점을 추적하는 로컬 지점을 삭제하기 만하면됩니다.
git branch -d -r origin/<remote branch name>
-r, --remotes
git에게 원격 추적 분기를 삭제하도록 지시합니다 (즉, 원격 분기를 추적하도록 설정된 분기 삭제). 이 것 없는 원격 REPO에 지점을 삭제 !
자세한 내용은 ” 이해하기 힘든 시간을 보내고 자식을 페치 “
로컬 추적 분기에는 그러한 개념이 없으며 원격 추적 분기 만 있습니다.
그래서origin/master
원격 추적 지점입니다master
에서origin
REPO
Dobes Vandermeer 의 답변 에서 언급했듯이 로컬 브랜치 와 관련된 구성을 재설정해야합니다 .
git config --unset branch.<branch>.remote
git config --unset branch.<branch>.merge
의 업스트림 정보를 제거하십시오
<branchname>
.
분기가 지정되지 않은 경우 기본값은 현재 분기입니다.
(자식 1.8 이상 10 월 2012, b84869e을 투입 하여 (카를로스 마틴 니에 토 carlosmn
) )
그러면 푸시 / 풀이 완전히 인식되지 않습니다 origin/<remote branch name>
.
답변
현재 분기의 업스트림을 제거하려면 다음을 수행하십시오.
$ git branch --unset-upstream
Git v.1.8.0 이상에서 사용할 수 있습니다. (출처 : 1.7.9 ref , 1.8.0 ref )
답변
로컬 및 원격 분기 간의 연결을 제거하려면 다음을 수행하십시오.
git config --unset branch.<local-branch-name>.remote
git config --unset branch.<local-branch-name>.merge
필요하지 않은 경우 선택적으로 로컬 브랜치를 삭제하십시오.
git branch -d <branch>
원격 브랜치는 삭제되지 않습니다.
답변
가장 간단한 방법은 편집하는 것입니다 .git/config
다음은 예제 파일입니다
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
[remote "origin"]
url = git@example.com:repo-name
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "test1"]
remote = origin
merge = refs/heads/test1
[branch "master"]
remote = origin
merge = refs/heads/master
분기 섹션 merge = refs/heads/test1
에서 줄 삭제test1
답변
다음을 사용하여 원격 추적 분기를 삭제할 수 있습니다
git branch -d -r origin/<remote branch name>
VonC가 위에서 언급했듯이. 그러나 지점의 로컬 사본을 유지하면 해당 지점 git push
을 계속 푸시하려고 시도합니다 ( 루핀에서와 같이 빨리 감기가 아닌 오류가 발생할 수 있음 ). 구성이 push.default
기본적으로 다음 matching
을 의미 하기 때문입니다 .
일치-일치하는 모든 분기를 밀어 넣습니다. 양쪽 끝에 같은 이름을 가진 모든 가지가 일치하는 것으로 간주됩니다. 이것이 기본값입니다.
(참고 http://git-scm.com/docs/git-config을 따라 push.default
)
이로 보는 것은 원격 추적 브랜치를 삭제할 때, 원 설정할 수있는 아마하지 않습니다 push.default
에 upstream
(또는 tracking
당신이 자식이있는 경우 <1.7.4.3)
업스트림-현재 브랜치를 업스트림 브랜치로 푸시합니다.
사용
git config push.default upstream
git은 “추적을 중지했다”는 브랜치를 푸시하려고 시도하지 않습니다.
참고 : 더 간단한 해결책은 로컬 지점의 이름을 다른 것으로 바꾸는 것입니다. 그것은 또한 혼란의 가능성을 제거 할 것입니다.
답변
다음은 패턴과 일치하는 모든 원격 추적 분기를 제거하는 단일 라이너입니다.
git branch -rd $(git branch -a | grep '{pattern}' | cut -d'/' -f2-10 | xargs)
답변
이것은 질문에 대한 대답은 아니지만 위의 주석에서 적절한 코드 형식을 얻는 방법을 알 수 없었습니다. 그래서 자동 다운 평판은 저의 주석입니다.
내 .gitconfig의 멋진 shmancy [alias] 항목에서 @Dobes가 서브 레시피를 대체했습니다.
# to untrack a local branch when I can't remember 'git config --unset'
cbr = "!f(){ git symbolic-ref -q HEAD 2>/dev/null | sed -e 's|refs/heads/||'; }; f"
bruntrack = "!f(){ br=${1:-`git cbr`}; \
rm=`git config --get branch.$br.remote`; \
tr=`git config --get branch.$br.merge`; \
[ $rm:$tr = : ] && echo \"# untrack: not a tracking branch: $br\" && return 1; \
git config --unset branch.$br.remote; git config --unset branch.$br.merge; \
echo \"# untrack: branch $br no longer tracking $rm:$tr\"; return 0; }; f"
그럼 난 그냥 실행할 수 있습니다
$ git bruntrack branchname