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?
Comme mentionné dans Yoshua Wuyts ' répondre , en utilisant git branch
:
git branch --unset-upstream
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.
DoncOrigin/master
est une branche de suivi à distance pourmaster
dans le repoOrigin
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>
.
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.
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
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 Push
essayera 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.
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
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.