Git'te uzak bir dalı izlemeyi nasıl durdurursunuz?


556

Git'te uzak bir dalı izlemeyi nasıl durdurursunuz ?

İzlemeyi bırakmayı istiyorum çünkü somut durumumda, yerel şubeyi silmek istiyorum, ancak uzak olanı silmek istemiyorum. Yerel olanı silmek ve uzaktan kumandayı silmek için uzak dalı da siler:

Sadece yapabilir miyim git branch -d the_branchve daha sonra olduğumda çoğalmayacak git pushmı?

Sadece git push origin :the_branchdaha sonra koşacak olursam çoğalır mı ?

Yanıtlar:


708

Bahsedildiği üzere Yoshua WUYTS ' cevabı kullanılarak git branch:

git branch --unset-upstream

Diğer seçenekler:

Yerel şubenizi silmenize gerek yoktur.

Uzak dalı izleyen yerel dalı silin:

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

-r, --remotesgit'e uzaktan izleme dalını silmesini söyler (yani, uzak dalı izlemek için dal kümesini sil). Bu olacak değil uzak repo şube silme !

Bkz. " Git-fetch'i anlamakta zorlanmak "

böyle bir yerel izleme kolu kavramı yoktur, sadece uzaktan izleme dalları vardır.
Yani origin/masteruzak izleme şube içindir masterde originrepo

Bahsedildiği üzere Dobes VanderMeer 'ın cevabı , aynı zamanda ilişkili yapılandırma sıfırlamak için gereken yerel şube:

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

İçin yukarı akış bilgilerini kaldırın <branchname>.
Hiçbir dal belirtilmezse, varsayılan olarak geçerli dal olur.

(git 1.8+, Ekim 2012, b84869e taahhüt tarafından (Carlos Martín Nieto carlosmn) )

Bu herhangi bir itme / çekme tamamen habersiz hale getirecektir origin/<remote branch name>.


8
Uzaktan izleme dalı git getirme işleminden sonra yeniden oluşturulur. Bunları hariç tutmak mümkün mü?
Matt R

1
@Matt: Bunun remote.<name>.fetchrefspec yapılandırma ayarını yaparak yapılacağına inanıyorum , ancak refspec belirtirken bir dalı hariç tutabileceğinizden emin değilim.
VonC

Bana da öyle geldi; Yine de yerel şubemi yeniden başardım ve hızlı ilerledikten sonra şubeler arasındaki görünür bağlantı ortadan kayboldu.
willoller

7
@ruffin: bu tamamen normaldir: repo'nuzda yerelgit branch -d -r origin/<remote branch name> olarak bildirilen bir uzak izleme dalını siler . Bu olacak değil uzak repo kendisi (sadece üzerinde şube silme yapayım). Bu nedenle , uzak geliştirme dalından (uzak repoda) farklı bir geçmişe sahip yerelinizi iterken , uyarı almaya devam edersiniz . git push :developmentdevelopmentnon-fast-forward
VonC

1
@Marco true, ama yine de yapmayı tercih ederim, "temiz" buluyorum.
VonC

200

Geçerli dalın yukarı akışını kaldırmak için şunları yapın:

$ git branch --unset-upstream

Bu, Git v.1.8.0 veya daha yeni sürümler için kullanılabilir. (Kaynaklar: 1.7.9 ref , 1.8.0 ref )

kaynak


20
Seçilen cevap olmalıydı.
Kaiser

9
Mevcut dalı kaldırmak istemiyorsanız, basitçe:git branch --unset-upstream [branchname]
Sonata

2
Görünüşe göre bu yeni. Biraz daha fazla bilgi güzel olurdu. Giriş versiyonu.
ManuelSchneid3r

Elbette, bulduğunuzda cevap vermekten çekinmeyin ve yorumu mutlu bir şekilde güncelleyeceğim
Yoshua Wuyts

Hmm, bunu fatal: 'origin/master' does not appear to be a git repository fatal: Could not read from remote repository. yaptıktan ve bir git pull origin / master denedikten sonra alıyorum
information_interchange

106

Yerel ve uzak şube çalıştırması arasındaki ilişkiyi kaldırmak için:

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

İhtiyacınız yoksa, isteğe bağlı olarak yerel şubeyi silin:

git branch -d <branch>

Bu uzak dalı silmez.


11
git branch -d <branch>olduğu olmayan ilişki kaldırmak için gereklidir.
Marco

1
JIRA kullanıyorum. Tekrar çektiğimde dal belirir. Bunu nasıl önleyebilirim?
powder366

1
@Marco Doğru, ancak kullanırsanız, git branch -vvsiz eski dalları görene kadar göreceksiniz git branch -d <branch>.
SeldomNeedy

@ powder366 Ayarlarınıza bağlı olarak, tüm uzak dalları git pullkapabilir ve uzaktan kumandada "göründüğünü" düşündüğü tüm öğeleri yeniden ekleyebilir. Sen yaparak bu "bütün dalları çekme" davranışını değiştirebilir git config [--global] push.default simpleveya git config [--global] push.default current. Daha fazlası push.defaultburada .
SeldomNeedy

1
@SeldomNeedy Bence bir DVCS'nin noktasını kaçırıyor olabilirsiniz? Mesele şu ki, bir memba şubesini takip etmeye başlayan bir şubem olabilir, fakat memba şubesinin kullanmadığı bir yaklaşımı izlemek için ayrıldım. Bu durumda, şube ne "eski" (çünkü üzerinde hala gelişiyorum) ne de "kullanılmıyor" (çünkü kullanıyorum). Bu DVCS tasarımının büyük bir kısmıdır. Bu mantıklı mı?
Marco

33

En basit yol, .git/config

İşte bir örnek dosya

[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

Satırı silin merge = refs/heads/test1içinde test1şube bölümünde


3
+1 Kesinlikle bunun en kolay yöntem olduğunu söyleyemem, ama kesinlikle anlaması en kolay olanı (ve umarım hatırlamak için)!
adaçayı

Güzel çözüm +1. Bu aslında izlemenin kaydedildiği, değiştirilmesi kolay, ne yaptığını netleştiren yerdir. Komut satırı .git/configda kullanılabilir.
hakre

5
fyi, bu Dobes Vandermeer'in "git config --unset" çözümü ile aynıdır. "git config" bu dosyayı düzenler.
JZ

10

Uzaktan izleme dalını kullanarak silebilirsiniz.

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

VonC yukarıda bahsedildiği gibi. Bununla birlikte, şubenin yerel kopyasını tutarsanız git push , yine de bu dalı zorlamaya çalışır (bu da size ruffin için olduğu gibi hızlı ileri olmayan bir hata verebilir ). Bunun nedeni, yapılandırma push.defaultvarsayılanı matching:

eşleşen - eşleşen tüm dalları itin. Her iki uçta aynı ada sahip tüm dalların eşleştiği kabul edilir. Bu varsayılan ayardır.

(bkz http://git-scm.com/docs/git-config altında push.default)

Bu gibi görünce uzaktan izleme dalı silinmiş zaman, istediği Belirleyebileceğiniz muhtemelen ne olduğunu push.defaultiçin upstream(ya trackingsen budala varsa <1.7.4.3)

akış yukarı - geçerli dalı yukarı akış dalına doğru itin.

kullanma

git config push.default upstream

git git "izlemeyi bıraktığınız" dalları itmeye çalışmayı durduracaktır.

Not: Daha basit çözüm, yerel şubenizi başka bir adla yeniden adlandırmak olacaktır. Bu, bazı karışıklık potansiyelini de ortadan kaldıracaktır.


3

Bir desenle eşleşen tüm uzaktan izleme dallarını kaldırmak için bir astar:

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


Sadece uzaktan izleme dalları izlenecek (silinecek), o zaman bu daha kısa tek satır alternatif olduğunu düşünüyorum:git branch -r -D $(git branch -r | grep -v "master")
dma_k

1

Bu soruya bir cevap değil, ama yukarıdaki bir yorumda iyi kod biçimlendirme almak nasıl anlayamadım ... yani otomatik aşağı itibar-lanet olsun benim yorum.

Benim .gitconfig bir süslü shmancy [takma ad] giriş @ Dolar tarafından sunulan tarifi var:

# 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"

Sonra koşabilirim

$ git bruntrack branchname

1
+1. Yukarıdaki yanıma ek olarak güzel takma ad .
VonC

-1

git branch --unset-upstream arzu edilmeyen tüm yerel şubeleri izlemeyi durdurur.

[branch "branch-name"]Bölümü .git/configdosyadan kaldırın ve ardından

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

benim için en iyisini yapar.


-1

Uzak dalınızı kaldırmak için bu yolu kullanabilirsiniz

git remote remove <your remote branch name>

1
Bu, uzaktan kumandanın tüm uzaktan izleme dallarını kaldıracaktır : birden fazla sorununuz varsa, bu sorunlu olabilir.
VonC

-2

Bunu yapmanın en kolay yolu dalı uzaktan silmek ve kullanmaktır:

git fetch - prune (diğer adıyla git fetch -p)


14
Kafam karıştı, OP uzak dalı silmek istemedi.
madth3

İzlenen uzak dalları, uzak çıplak depoda silinen yerel deponuzdan temizlemek iyidir.
Marek Podyma
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.