Como você para de rastrear uma ramificação remota no Git?

Como você para de rastrear uma ramificação remota no Git ?

Eu estou pedindo para parar o rastreamento porque no meu caso concreto, eu quero excluir o ramo local, mas não o remoto. Excluir o local e pressionar a exclusão para remoto também excluirá o ramo remoto:

  • Como eu excluo uma ramificação do Git localmente e no GitHub?

Posso apenas fazer git branch -d the_branch , e ele não será propagado quando mais tarde for git push ?

Será que ele só se propaga se eu for executar a git push origin :the_branch mais tarde?

Como mencionado na resposta de Yoshua Wuyts , usando o git branch :

 git branch --unset-upstream 

Outras opções:

Você não precisa excluir sua filial local.

Basta excluir seu ramo de rastreamento remoto:

 git branch -d -r origin/ 

(Isso não excluirá o ramo no repository remoto !)

Consulte ” Não é fácil entender o git-fetch ”

não existe esse conceito de ramificação de rastreamento local, apenas ramificações de rastreamento remoto.
Então, origin/master é uma ramificação de rastreamento remoto para master no repository de origin

Como mencionado na resposta de Dobes Vandermeer , você também precisa redefinir a configuração associada à ramificação local :

 git config --unset branch..remote git config --unset branch..merge 

Remova as informações de upstream para .
Se nenhuma ramificação for especificada, o padrão será a ramificação atual.

(git 1.8+, out. 2012, commit b84869e de Carlos Martín Nieto ( carlosmn ) )

Isso fará com que qualquer push / pull ignore completamente a origin/ .

Para remover o upstream do branch atual, faça:

 $ git branch --unset-upstream 

Isso está disponível para o Git v.1.8.0 ou mais recente. (Fontes: 1.7.9 ref , 1.8.0 ref )

fonte

Para remover a associação entre a execução local e remota da ramificação:

 git config --unset branch..remote git config --unset branch..merge 

Opcionalmente, exclua o ramo local depois, se você não precisar dele:

 git branch -d  

Isso não excluirá o ramo remoto.

A maneira mais simples é editar .git/config

Aqui está um arquivo de exemplo

 [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 

Exclua a merge = refs/heads/test1 linha merge = refs/heads/test1 na seção de ramificação test1

Você pode excluir a ramificação de rastreamento remoto usando

 git branch -d -r origin/ 

como VonC menciona acima. No entanto, se você mantiver sua cópia local da ramificação, o git push ainda tentará empurrar essa ramificação (o que pode causar um erro de não avanço rápido, como ocorreu no ruffin ). Isso ocorre porque a configuração push.default padronizada para matching que significa:

correspondência – empurre todos os ramos correspondentes. Todas as filiais com o mesmo nome em ambas as extremidades são consideradas correspondentes. Este é o padrão.

(veja http://git-scm.com/docs/git-config em push.default )

Vendo que provavelmente não é o que você queria quando você excluiu o ramo de rastreamento remoto, você pode definir push.default para upstream (ou tracking se você tiver git <1.7.4.3)

upstream – empurra a ramificação atual para sua ramificação upstream.

usando

 git config push.default upstream 

e o git irá parar de tentar empurrar os ramos que você “parou de rastrear”.

Nota: A solução mais simples seria apenas renomear seu ramo local para outra coisa. Isso eliminaria algum potencial de confusão também.

Aqui está um verso para remover todas as ramificações de rastreamento remoto que correspondem a um padrão:

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

Isso não é uma resposta para a pergunta, mas eu não consegui descobrir como obter formatação de código decente em um comentário acima … então, auto-down-reputation-be-damned, aqui está o meu comentário.

Eu tenho a receita submptada pelo @Dobes em uma input chique de shmancy [alias] no meu .gitconfig:

 # 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" 

Então eu posso apenas correr

 $ git bruntrack branchname 

A maneira mais fácil de fazer isso é excluir a ramificação remotamente e usar:

git fetch –prune (também conhecido como git fetch -p)