web-dev-qa-db-fra.com

Comment arrêtez-vous le suivi d'une branche distante dans Git?

Comment arrêtez-vous de suivre une branche distante dans Git ?

Je demande d'arrêter le suivi parce que, dans mon cas concret, je veux supprimer la branche locale, mais pas la branche distante. La suppression de la section locale et le transfert de la suppression à distance suppriment également la branche distante:

Puis-je simplement faire git branch -d the_branch, et il ne sera pas propagé plus tard, git Push

Cela ne se propagera-t-il que si je lance git Push Origin :the_branch plus tard?

446
Jason Cohen

Comme mentionné dans Yoshua Wuyts ' répondre , en utilisant git branch :

git branch --unset-upstream

Autres options:

Vous n'êtes pas obligé de supprimer votre branche locale.

Supprimez simplement votre branche de suivi à distance:

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

(Ceci ne pas supprimera la branche du dépôt distant !)

Voir " Avoir du mal à comprendre git-fetch "

il n'y a pas de tel concept de branches de suivi local, seulement des branches de suivi à distance.
Donc Origin/master est une branche de suivi à distance pour master dans le repo Origin

Comme indiqué dans Dobes Vandermeer 's answer , vous devez également réinitialiser la configuration associée à la branche local:

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

Supprimez les informations en amont pour <branchname>.
Si aucune branche n'est spécifiée, la branche actuelle est utilisée par défaut.

(git 1.8+, octobre 2012, commit b84869e par Carlos Martín Nieto (carlosmn) )

Cela fera que tout Push/Pull ignore complètement Origin/<remote branch name>.

566
VonC

Pour supprimer l'amont de la branche actuelle, procédez comme suit:

$ git branch --unset-upstream

Ceci est disponible pour Git v.1.8.0 ou plus récent. (Sources: 1.7.9 réf , 1.8.0 réf )

la source

166
Yoshua Wuyts

Pour supprimer l'association entre les branches locale et distante, exécutez:

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

Supprimez éventuellement la branche locale par la suite si vous n'en avez pas besoin:

git branch -d <branch>

Cela ne supprimera pas la branche distante.

106
Dobes Vandermeer

Le moyen le plus simple est d’éditer .git/config

Voici un exemple de fichier

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
[remote "Origin"]
        url = [email protected]:repo-name
        fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "test1"]
        remote = Origin
        merge = refs/heads/test1
[branch "master"]
        remote = Origin
        merge = refs/heads/master

Supprimer la ligne merge = refs/heads/test1 dans la section de branche test1

32

Vous pouvez supprimer la branche de suivi à distance à l'aide de

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

comme le mentionne VonC ci-dessus. Cependant, si vous conservez votre copie locale de la branche, git Pushessayera toujours de pousser cette branche (ce qui pourrait vous donner une erreur d’avance rapide comme pour ruffin ). En effet, la valeur par défaut de config Push.default est matching, ce qui signifie:

matching - Poussez toutes les branches correspondantes. Toutes les branches ayant le même nom aux deux extrémités sont considérées comme correspondantes. C'est la valeur par défaut.

(voir http://git-scm.com/docs/git-config sous Push.default)

Étant donné que ce n'est probablement pas ce que vous vouliez lorsque vous avez supprimé la branche de suivi à distance, vous pouvez définir Push.default sur upstream (ou tracking si vous avez git <1.7.4.3).

upstream - Déplace la branche actuelle vers sa branche amont.

en utilisant

git config Push.default upstream

et git arrêtera d'essayer de pousser les branches que vous avez "arrêtées de suivre".

Remarque: La solution la plus simple consisterait simplement à renommer votre branche locale. Cela éliminerait également un risque de confusion.

9
CletusW

Ce n'est pas une réponse à la question, mais je n'arrivais pas à comprendre comment obtenir une mise en forme de code correcte dans un commentaire ci-dessus ...

J'ai la recette soumise par @Dobes dans une entrée fantaisie [alias] dans mon .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"

Ensuite, je peux juste courir

$ git bruntrack branchname
1
qneill

git branch --unset-upstream arrête de suivre toutes les branches locales, ce qui n'est pas souhaitable.

Supprimez la section [branch "branch-name"] du fichier .git/config suivie de 

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

fonctionne le meilleur pour moi.

0
Bob