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?
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.
Doncorigin/master
est une branche de suivi à distance pourmaster
dans leorigin
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>
.
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 )
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.
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
."
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.
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)
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
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)