Git에서 원격 브랜치 추적을 어떻게 중지합니까?


556

Git 에서 원격 브랜치 추적을 어떻게 중지 합니까?

구체적인 경우에는 로컬 브랜치를 삭제하고 싶지만 원격 브랜치는 삭제하지 않기 때문에 추적을 중지하고 싶습니다. 로컬 항목을 삭제하고 삭제를 원격으로 푸시하면 원격 분기도 삭제됩니다.

방금 할 수 git branch -d the_branch있으며 나중에 다시 전파되지 git push않습니까?

git push origin :the_branch나중에 뛰어야 만 전파 됩니까?

답변:


708

Yoshua Wuyts답변 에서 언급했듯이 다음을 사용합니다 git branch.

git branch --unset-upstream

다른 옵션:

로컬 지점을 삭제할 필요는 없습니다.

원격 지점을 추적하는 로컬 지점을 삭제하기 만하면됩니다.

git branch -d -r origin/<remote branch name>

-r, --remotesgit에게 원격 추적 분기를 삭제하도록 지시합니다 (즉, 원격 분기를 추적하도록 설정된 분기 삭제). 이 없는 원격 REPO에 지점을 삭제 !

자세한 내용은 " 이해하기 힘든 시간을 보내고 자식을 페치 "

로컬 추적 분기에는 그러한 개념이 없으며 원격 추적 분기 만 있습니다.
그래서 origin/master원격 추적 지점입니다 master에서 originREPO

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


8
원격 추적 브랜치는 git 페치 후에 다시 생성됩니다. 이것들을 제외 할 수 있습니까?
Matt R

1
@ 매트 : 이것은 remote.<name>.fetchrefspec 구성 설정 을 설정하여 수행 할 것이라고 생각 하지만 refspec을 지정할 때 분기를 제외시킬 수 있는지 확실하지 않습니다.
VonC

나에게도 그렇게 나타났습니다. 나는 현지 지사를 리베이스 할 수 있었고 빨리 감기 후에 가지 사이의 명백한 연결이 사라졌습니다.
willoller

7
@ruffin : 이것은 완전히 정상입니다. 리포지토리 에서 로컬git branch -d -r origin/<remote branch name> 로 선언 된 원격 추적 분기를 삭제합니다 . 그것은 것입니다 하지 원격 REPO 자체 (만은에 지점을 삭제 그렇게 할 것이다). 따라서 원격 개발 브랜치 (원격 리포지토리)와 다른 히스토리로 로컬을 푸시 할 때 여전히 경고가 표시됩니다. git push :developmentdevelopmentnon-fast-forward
VonC

1
@Marco 사실이지만 어쨌든 나는 그것을 더 깨끗하게 생각합니다.
VonC

200

현재 분기의 업스트림을 제거하려면 다음을 수행하십시오.

$ git branch --unset-upstream

Git v.1.8.0 이상에서 사용할 수 있습니다. (출처 : 1.7.9 ref , 1.8.0 ref )

출처


20
선택한 답변이되어야합니다.
kaiser 2016 년

9
현재 분기를 제거하지 않으려면 다음과 같이하십시오.git branch --unset-upstream [branchname]
Sonata

2
이것이 새로운 것 같습니다. 조금 더 많은 정보가 좋을 것입니다. 예를 들어 소개.
ManuelSchneid3r

확실히, 당신이 발견하면 답장을 보내 주시면 기꺼이 댓글을 업데이트
하겠습니다

흠, 내가지고있어 fatal: 'origin/master' does not appear to be a git repository fatal: Could not read from remote repository. 자식 끌어 오기 원산지 / 마스터이 일을하고 시도 후
information_interchange을

106

로컬 및 원격 분기 간의 연결을 제거하려면 다음을 수행하십시오.

git config --unset branch.<local-branch-name>.remote
git config --unset branch.<local-branch-name>.merge

필요하지 않은 경우 선택적으로 로컬 브랜치를 삭제하십시오.

git branch -d <branch>

원격 브랜치는 삭제되지 않습니다.


11
git branch -d <branch>연결을 제거 할 필요 는 없습니다 .
Marco

1
JIRA를 사용하고 있습니다. 다시 당기면 가지가 나타납니다. 어떻게 방지 할 수 있습니까?
powder366

1
@Marco 맞습니다. 그러나 사용 git branch -vv하면 할 때까지 이전 분기가 계속 표시됩니다 git branch -d <branch>.
SeldomNeedy

@ powder366 설정에 따라 모든 원격 브랜치를 git pull잡고 원격에 "나타났다"고 생각되는 항목을 다시 추가 할 수 있습니다. 당신은 수행하여이 "모든 지점을 당겨"동작을 변경할 수 있습니다 또는 . 여기에 있습니다 . git config [--global] push.default simplegit config [--global] push.default currentpush.default
SeldomNeedy

1
@SeldomNeedy DVCS의 요점을 놓치고 있다고 생각하십니까? 요점은 업스트림 브랜치를 추적하기 시작하는 브랜치를 가질 수 있지만 업스트림 브랜치가 사용하지 않는 접근 방식을 추구하기 위해 분리하는 것입니다. 이 경우 지점은 "오래된"(아직 개발 중이므로) 또는 "사용하지 않기 때문에"사용되지 않습니다. 이것은 DVCS 디자인의 큰 부분입니다.
Marco

33

가장 간단한 방법은 편집하는 것입니다 .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


3
+1 나는 이것이 가장 쉬운 방법이라고 확실히 말할 수는 없지만, 내가 이해하고 (그리고 기억하기를 희망하는) 가장 쉬운 방법임을 분명히 알 수 있습니다!
세이지

좋은 해결책 +1. 이것은 실제로 추적이 등록 된 장소이며, 변경하기 쉽고, 무엇을하는지 명확하게합니다. 명령 줄 .git/config도 사용할 수 있습니다.
hakre

5
참고로, 이것은 Dobes Vandermeer의 "git config --unset"솔루션과 동일합니다. "git config"는이 파일을 편집합니다.
JZ

10

다음을 사용하여 원격 추적 분기를 삭제할 수 있습니다

git branch -d -r origin/<remote branch name>

VonC가 위에서 언급했듯이. 그러나 지점의 로컬 사본을 유지하면 해당 지점 git push 을 계속 푸시하려고 시도합니다 ( 루핀에서와 같이 빨리 감기가 아닌 오류가 발생할 수 있음 ). 구성이 push.default기본적으로 다음 matching을 의미 하기 때문입니다 .

일치-일치하는 모든 분기를 밀어 넣습니다. 양쪽 끝에 같은 이름을 가진 모든 가지가 일치하는 것으로 간주됩니다. 이것이 기본값입니다.

(참고 http://git-scm.com/docs/git-config을 따라 push.default)

이로 보는 것은 원격 추적 브랜치를 삭제할 때, 원 설정할 수있는 아마하지 않습니다 push.defaultupstream(또는 tracking당신이 자식이있는 경우 <1.7.4.3)

업스트림-현재 브랜치를 업스트림 브랜치로 푸시합니다.

사용

git config push.default upstream

git은 "추적을 중지했다"는 브랜치를 푸시하려고 시도하지 않습니다.

참고 : 더 간단한 해결책은 로컬 지점의 이름을 다른 것으로 바꾸는 것입니다. 그것은 또한 혼란의 가능성을 제거 할 것입니다.


3

다음은 패턴과 일치하는 모든 원격 추적 분기를 제거하는 단일 라이너입니다.

git branch -rd $(git branch -a | grep '{pattern}' | cut -d'/' -f2-10 | xargs)


원격 추적 브랜치 만 추적을 해제 (삭제)해야한다면이 방법이 더 짧은 한 줄 대안이라고 생각합니다.git branch -r -D $(git branch -r | grep -v "master")
dma_k

1

이것은 질문에 대한 대답은 아니지만 위의 주석에서 적절한 코드 형식을 얻는 방법을 알 수 없었습니다. 그래서 자동 다운 평판은 저의 주석입니다.

내 .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

1
+1. 위의 답변 외에도 멋진 별칭 입니다.
VonC

-1

git branch --unset-upstream 로컬 분기를 모두 추적하지 않으므로 바람직하지 않습니다.

파일 에서 [branch "branch-name"]섹션을 제거한 .git/config다음

git branch -D 'branch-name' && git branch -D -r 'origin/branch-name'

나를 위해 최선을 다합니다.


-1

이 방법으로 원격 지점을 제거 할 수 있습니다

git remote remove <your remote branch name>

1
그러면 해당 원격의 모든 원격 추적 분기 가 제거 됩니다 . 하나 이상인 경우 문제가 될 수 있습니다.
VonC

-2

가장 쉬운 방법은 지점을 원격으로 삭제하고 다음을 사용하는 것입니다.

git fetch --prune (일명 git fetch -p)


14
혼란스러워 OP가 원격 지점을 삭제하고 싶지 않았습니다.
madth3

원격 Bare 저장소에서 삭제 된 로컬 저장소에서 추적 된 원격 분기를 정리하는 것이 좋습니다.
Marek Podyma
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.