Comment arrêter de pister une branche distante dans Git?

Comment arrêter de suivre une branche distante dans Git ?

je demande à arrêter le suivi parce que dans mon cas concret, je veux supprimer la branche locale, mais pas la distance. Supprimer le local et pousser la suppression à distance supprimera aussi la branche distante:

  • Comment supprimer une branche Git à la fois localement et dans GitHub?

Puis-je simplement faire git branch -d the_branch , et ça ne se propagera pas plus tard git push ?

se propagera-t-il seulement si je devais lancer git push origin :the_branch plus tard?

426
demandé sur Community 2010-06-15 19:06:32

8 réponses

comme indiqué dans Yoshua Wuyts answer , en utilisant git branch :

git branch --unset-upstream

autres options:

Vous n'avez pas à supprimer votre succursale locale.

supprimez simplement votre branche de suivi à distance:

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

(Ce sera pas supprimer la branche sur la télécommande repo !)

Voir " Avoir du mal à comprendre git-fetch "

il n'y a pas de concept de branche locale de suivi, seulement les branches de suivi à distance.

Donc origin/master est une branche de suivi à distance pour master dans le origin repo

, Comme mentionné dans les entrepreneurs handicapés Vandermeer 's réponse , vous devez également réinitialiser la configuration associée à la locale branche:

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

Supprimer l'information en amont pour <branchname> .

Si aucune branche n'est spécifiée, elle est par défaut la branche courante.

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

qui ne fera aucune poussée/traction complètement ignorante de origin/<remote branch name> .

531
répondu VonC 2017-07-06 22:02:18

Pour supprimer l'amont de la branche courante:

$ git branch --unset-upstream

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

source

152
répondu Yoshua Wuyts 2017-09-21 19:36:07

pour supprimer l'association entre l'exécution locale et l'exécution à distance:

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

éventuellement supprimer la branche locale après si vous n'en avez pas besoin:

git branch -d <branch>

cela ne supprimera pas la branche distante.

103
répondu Dobes Vandermeer 2014-02-26 22:25:08

la manière la 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 = 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

supprimer la ligne merge = refs/heads/test1 dans la test1 ."

32
répondu Jacob Groundwater 2011-11-08 07:28:49

vous pouvez supprimer la branche de suivi à distance en utilisant

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

comme VonC le mentionne ci-dessus. Cependant, si vous conservez votre copie locale de la branche, git push va toujours essayer de pousser cette branche (ce qui pourrait vous donner une erreur non-fast-forward comme il l'a fait pour ruffin ). C'est parce que la config push.default par défaut à matching qui signifie:

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

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

vu que ce n'est probablement pas ce que vous vouliez quand vous avez supprimé la branche de suivi à distance, vous pouvez définir push.default à upstream (ou tracking si vous avez git < 1.7.4.3)

de l'amont à pousser le courant branche à son amont de la branche.

utilisant

git config push.default upstream

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

Note: la solution la plus simple serait de simplement renommer votre branche locale à quelque chose d'autre. Cela éliminerait également un certain risque de confusion.

8
répondu CletusW 2017-05-23 12:34:48

Voici une doublure pour enlever toutes les branches de suivi à distance correspondant à un motif:

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

3
répondu infomaniac 2016-06-01 10:17:40

ce n'est pas une réponse à la question, mais je ne pouvais pas comprendre comment obtenir le formatage de code décent dans un commentaire ci-dessus... donc auto-Down-réputation-être damné voici mon commentaire.

j'ai la recette présentée par @Dobes dans une entrée de fantaisie shmancy [alias] dans my .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"

alors je peux juste courir

$ git bruntrack branchname
1
répondu qneill 2015-09-23 03:20:02

la manière la plus simple de faire cela est de supprimer la branche à distance puis d'utiliser:

git fetch --prune (alias git fetch-p)

-2
répondu Mark Caudill 2013-05-09 17:36:27