Come smetti di monitorare un ramo remoto in Git?

Come smetti di monitorare un ramo remoto in Git ?

Sto chiedendo di interrompere il tracciamento perché nel mio caso concreto, voglio eliminare il ramo locale, ma non quello remoto. L’eliminazione di quella locale e l’eliminazione della cancellazione su remoto elimineranno anche il ramo remoto:

  • Come faccio a eliminare un ramo Git sia localmente che in GitHub?

Posso semplicemente fare git branch -d the_branch , e non verrà propagato quando più tardi git push ?

Si propagherà solo se dovessi eseguire git push origin :the_branch seguito?

    Come menzionato nella risposta di Yoshua Wuyts , usando il git branch :

     git branch --unset-upstream 

    Altre opzioni:

    Non devi cancellare la tua filiale locale.

    Elimina semplicemente il tuo ramo di monitoraggio remoto:

     git branch -d -r origin/ 

    (Questo non cancellerà il ramo sul repository remoto !)

    Vedi ” Difficoltà a capire git-fetch ”

    non esiste un tale concetto di filiali di localizzazione locali, solo filiali di monitoraggio remoto.
    Quindi origin/master è un ramo di monitoraggio remoto per il master nel repository di origin

    Come menzionato nella risposta di Dobes Vandermeer , devi anche resettare la configurazione associata al ramo locale :

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

    Rimuovere le informazioni upstream per .
    Se non viene specificato alcun ramo, il valore predefinito è il ramo corrente.

    (Git 1.8+, ottobre 2012, commit b84869e di Carlos Martín Nieto ( carlosmn ) )

    Ciò renderà qualsiasi push / pull completamente inconsapevole origin/ .

    Per rimuovere l’upstream per il ramo corrente fare:

     $ git branch --unset-upstream 

    Questo è disponibile per Git v.1.8.0 o più recente. (Fonti: 1.7.9 ref , 1.8.0 ref )

    fonte

    Per rimuovere l’associazione tra l’esecuzione della diramazione locale e remota:

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

    Se lo desideri, elimina il ramo locale in un secondo momento:

     git branch -d  

    Questo non cancellerà il ramo remoto.

    Il modo più semplice è modificare .git/config

    Ecco un file di esempio

     [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 

    Elimina l’ merge = refs/heads/test1 linea merge = refs/heads/test1 nella sezione branch test1

    È ansible eliminare il ramo di localizzazione remota utilizzando

     git branch -d -r origin/ 

    come menziona VonC sopra. Tuttavia, se mantieni la copia locale del ramo, git push cercherà comunque di forzare quel ramo (che potrebbe darti un errore di non avanzamento veloce come per il ruffin ). Questo perché config push.default impostazione predefinita la matching che significa:

    matching – spinge tutti i rami corrispondenti. Tutti i rami che hanno lo stesso nome in entrambe le estremità sono considerati corrispondenti. Questo è l’impostazione predefinita.

    (vedi http://git-scm.com/docs/git-config sotto push.default )

    Visto che probabilmente questo non è quello che volevi quando hai eliminato il ramo di localizzazione remota, puoi impostare push.default in upstream (o tracking se hai git <1.7.4.3)

    upstream – spinge il ramo corrente verso il suo ramo upstream.

    utilizzando

     git config push.default upstream 

    e git smetterà di cercare di spingere i rami che hai “smesso di tracciare”.

    Nota: la soluzione più semplice sarebbe semplicemente rinominare il ramo locale con qualcos’altro. Ciò eliminerebbe anche un certo potenziale di confusione.

    Ecco un one-liner per rimuovere tutti i rami di tracciamento remoto che corrispondono a un modello:

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

    Questa non è una risposta alla domanda, ma non riuscivo a capire come ottenere una formattazione decente del codice in un commento sopra … quindi la mia auto-down-reputation-dannazione qui è il mio commento.

    Ho la ricetta presentata da @Dobes in una fancy shmancy [alias] nel mio .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" 

    Quindi posso solo correre

     $ git bruntrack branchname 

    Il modo più semplice per farlo è quello di eliminare il ramo da remoto e quindi utilizzare:

    git fetch –prune (anche git fetch -p)