Git dalını yerel olarak ve uzaktan nasıl silebilirim?


16953

Bir şubeyi hem yerel hem de uzaktan silmek istiyorum.

Uzak Dal Silinemedi

$ git branch -d remotes/origin/bugfix
error: branch 'remotes/origin/bugfix' not found.

$ git branch -d origin/bugfix
error: branch 'origin/bugfix' not found.

$ git branch -rd origin/bugfix
Deleted remote branch origin/bugfix (was 2a14ef7).

$ git push
Everything up-to-date

$ git pull
From github.com:gituser/gitproject

* [new branch] bugfix -> origin/bugfix
Already up-to-date.

remotes/origin/bugfixŞubeyi hem yerel olarak hem de uzaktan başarıyla silmek için farklı olarak ne yapmalıyım ?


1057
Moderatör notu: Bu soruya cevap vermek istiyorsanız, zaten 40 cevap bulunduğunu unutmayın. Yeni cevabınız önemli bir değer katacak mı?
Robert Harvey

54
Not: Git 2.5+ (Q2 2015) için kesin mesaj " deleted remote-tracking branch" olacaktır : bkz. Github.com/git/git/commit/…
VonC

Yerel bir şube VE uzak bir şube silme arasındaki farkı basitleştiren bu komut dosyasıyla ilgilenebilirsiniz: tlbx.app/blog/delete-any-git-branch-the-easy-way
Mig

@RobertHarvey Şimdi 39
Adam

@Adam: 81. Çeşitli nedenlerle 42 cevap silindi. Halkın belirli bir konuya açıklanamayan takıntısı, hayatın en büyük gizemlerinden biridir.
Robert Harvey

Yanıtlar:


21427

Yönetici Özeti

$ git push -d <remote_name> <branch_name>
$ git branch -d <branch_name>

Çoğu durumda uzak adın olduğunu unutmayın origin. Böyle bir durumda komutu böyle kullanmanız gerekir.

$ git push -d origin <branch_name>

Yerel Şubeyi Sil

Yerel dalı silmek için aşağıdakilerden birini kullanın:

$ git branch -d branch_name
$ git branch -D branch_name

Not: Bu -dseçenek, --deleteyalnızca yukarı akış dalında önceden birleştirilmişse dalı silen bir takma addır. Ayrıca -D, --delete --force"birleştirilmiş durumuna bakılmaksızın" dalı silen için bir takma ad olan kullanabilirsiniz . [Kaynak: man git-branch]

Uzak Dalı Sil [8 Eylül 2017'de güncellendi]

İtibariyle Git v1.7.0 , bir silebilirsiniz uzak kullanarak dalı

$ git push <remote_name> --delete <branch_name>

hatırlaması daha kolay olabilir

$ git push <remote_name> :<branch_name>

Git v1.5.0'a eklenen "uzaktaki bir dalı veya etiketi silmek için."

Git v2.8.0 sürümünden başlayarak için takma ad seçeneği git pushile de kullanabilirsiniz .-d--delete

Bu nedenle, yüklediğiniz Git sürümü daha kolay veya daha zor sözdizimini kullanmanız gerekip gerekmediğini belirler.

Uzak Şubeyi Sil [5 Oca 2010'dan Orijinal Yanıt]

Scott Chacon'un Pro Git'in 3. Bölümünden :

Uzak Dalları Silme

Uzak bir dalla işiniz bittiğini varsayalım - siz ve ortak çalışanlarınız bir özellikle bitirdiniz ve onu uzaktan kumandanızın ana dalında (veya sabit kod satırınızın hangi dalda olursa olsun) birleştirdiniz. Uzaktaki bir dalı oldukça geniş sözdizimini kullanarak silebilirsiniz git push [remotename] :[branch]. Sunucu düzeltme dalınızı sunucudan silmek istiyorsanız, aşağıdakileri çalıştırın:

$ git push origin :serverfix
To git@github.com:schacon/simplegit.git
 - [deleted]         serverfix

Boom. Sunucunuzda artık şube yok. Bu komuta kulak vermek isteyebilirsiniz, çünkü bu komuta ihtiyacınız olacak ve muhtemelen sözdizimini unutacaksınız. Bu komutu hatırlamanın bir yolu, git push [remotename] [localbranch]:[remotebranch]biraz önce geçtiğimiz sözdizimini hatırlamaktır . Eğer [localbranch]porsiyondan ayrılırsanız , o zaman “Yanımda hiçbir şey almayın ve olun” diyorsunuz [remotebranch].

Yayınladım git push origin: bugfixve güzel çalıştı. Scott Chacon sağ ben isteyeceksiniz edildi köpek kulağı bu sayfa (veya yığın taşması bu cevaplayarak neredeyse köpek kulak).

O zaman bunu diğer makinelerde yapmalısınız

# Fetch changes from all remotes and locally delete 
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune

değişiklikleri yaymak.


353
git fetch --all --pruneSunucudaki uzak dalı sildikten sonra diğer makinelerde yapmayı unutmayın . ||| Yerel şubeyi git branch -dsildikten ve uzak şubeyi git push origin --deletediğer makinelerle sildikten sonra hala "eski izleme şubeleri" (bunları görmek için git branch -a) olabilir. Bunlardan kurtulmak için git fetch --all --prune.
Trevor Boyd Smith

14
@ TrevorBoydSmith'in git branch -atüm şubeleri görüntülemesine ek olarak , git branch -ryalnızca uzak şubeleri görüntülemek için de kullanabilirsiniz . ayrıca bkz. git remote show origin- kaynak: gitready.com/intermediate/2009/02/13/list-remote-branches.html
Sandra

17
Ben çalıştırmak zorunda git branch -D Branch_Nameil teşkilatının kurtulmak
Kolob Canyon

11
@KolobCanyon -D'yi yalnızca dal başka bir dalda birleştirilmemişse kullanmanız gerekir.
BTRUE

3
Soru, "Yerel olarak ve GitHub'da uzaktan kumanda / origin / bugfix dalını başarıyla silmek için farklı olarak ne yapmam gerekiyor?" Güncelleştirilmiş cevabınızdaki komutları çalıştırdıktan sonra, yerel şube hala mevcuttur. Kabul edilen cevabın eksiksiz bir cevap olması iyi olurdu .
Git'in

3316

Matthew'in cevabı uzak dalları kaldırmak için harika ve aynı zamanda açıklamayı takdir ediyorum, ancak iki komut arasında basit bir ayrım yapmak için:

Yerel bir dalı makinenizden kaldırmak için :

git branch -d {the_local_branch}( -Dbunun yerine, birleştirilen durumu kontrol etmeden şubeyi silmeye zorlamak için kullanın )

Uzak bir dalı sunucudan kaldırmak için :

git push origin --delete {the_remote_branch}

Referans: Git: Bir dalı silme (yerel veya uzak)


250
@megido well -Dforce silinir, -dhenüz birleştirilmemişse size bir uyarı verir.
TankorSmash

8
Yerel şubeniz usta ile birleşip 'git branch -d your_brancherror: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.
geeks

12
Daha güvenli olduğu için -D yerine -d kullanmanızı öneririm. Birleştirilmemiş taahhütler nedeniyle -d başarısız olursa, bunu değerlendirmeniz gerekir ve kaldırmanız kesinlikle uygunsa -D kullanın.
rooby

7
Uzak dalların kaldırıldığı depo klonları olan diğerleri, uzaktan kumandada artık bulunmayan eski dalları yerel olarak kaldırmak için çalıştırılmalıdır git remote prune <name>(örn. git remote prune origin).
code_dredd

3
Geçerli HEAD ile birleştirilmezse, -d'nin bir uyarı verdiğini eklemek istiyorum. Netliğe ihtiyacınız varsa bu komutu öneriyorum git branch -a --merged origin/masterHem yerel hem de uzak tüm dalları listeleyecektir; Efendi ile birleştirilen Ek bilgiler burada
Eric

2041

kısa cevaplar

Aşağıdaki komutlarla ilgili daha ayrıntılı açıklamalar istiyorsanız, bir sonraki bölümde verilen uzun yanıtlara bakın.

Uzak bir dalı silme

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin -d <branch>        # Shorter version (Git 1.7.0 or newer)
git push origin :<branch>          # Git versions older than 1.7.0

Yerel bir şubeyi silme

git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force-delete un-merged branches

Yerel bir uzaktan izleme şubesini silme

git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter

git fetch <remote> --prune # Delete multiple obsolete remote-tracking branches
git fetch <remote> -p      # Shorter

Uzun cevabı : silmek için üç farklı dallar vardır!

Hem yerel hem de uzaktan şubeleri silmekle uğraşırken , üç farklı şubenin bulunduğunu unutmayın :

  1. Yerel şube X.
  2. Uzak kaynak dalı X.
  3. origin/XUzak dalı izleyen yerel uzaktan izleme dalı X.

Üç dalın görselleştirilmesi

Kullanılan orijinal poster:

git branch -rd origin/bugfix

Hangi sadece onun silinen yerel uzaktan izleme dalı origin/bugfix değil, gerçek uzaktan şube bugfixüzerinde origin.

Şekil 2

Bu gerçek uzak dalı silmek için ,

git push origin --delete bugfix

Şekil 3

Ek detaylar

Aşağıdaki bölümlerde, uzaktan ve uzaktan izleme dallarınızı silerken dikkate almanız gereken ek ayrıntılar açıklanmaktadır.

Uzak dalları silmek için bastırmak da uzaktan izleme kollarını kaldırır

Uzak dalın Xkomut satırından bir komut satırı kullanılarak git push silinmesinin yerel uzaktan izleme dalını da kaldıracağını unutmayın origin/X , bu nedenle kullanılmayan uzaktan izleme dalını git fetch --pruneveya ile ayarlamak gerekmez git fetch -p. Ancak, yine de yaparsanız zarar vermez.

origin/XAşağıdakileri çalıştırarak uzaktan izleme şubesinin de silindiğini doğrulayabilirsiniz:

# View just remote-tracking branches
git branch --remotes
git branch -r

# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a

Eski yerel uzaktan izleme dalının kökeni budama / X

Uzak dalınızı Xkomut satırından (yukarıdaki gibi) silmediyseniz, yerel deponuz hala (artık kullanılmayan) bir uzaktan izleme dalı içerecektir origin/X. Bu, örneğin uzak bir dalı doğrudan GitHub'ın web arayüzü üzerinden sildiğinizde olabilir.

Bu eskimiş uzaktan izleme dalları uzaklaştırmak için tipik bir yolu basitçe çalıştırmak için (Git sürüm 1.6.6 beri) olduğu git fetchile --pruneveya daha kısa -p. Bu işlemin artık uzaktan kumandada bulunmayan uzak dallar için tüm eski yerel uzaktan izleme dallarını kaldırdığını unutmayın :

git fetch origin --prune
git fetch origin -p # Shorter

1.6.6 sürüm notlarından (vurgu mayın) ilgili alıntı :

"git fetch" öğrendim --all ve --multipleseçenekler, birçok depolardan getirme çalıştırmak ve --prunebayat gitti uzaktan izleme dallarını kaldırma seçeneği. Bunlar "git remote update" ve "git remote erik" i daha az gerekli kılar (gerçi "remote update" ne de "remote erik" seçiminin bir planı yoktur).

Eski uzaktan izleme dalları için yukarıdaki otomatik budamaya alternatif

Alternatif olarak, yerine yoluyla eski yerel uzaktan izleme dalları budama git fetch -p, fazladan ağ işlemi yapma önleyebilirsiniz sadece manuel ile şube (ler) kaldırarak --remoteveya -rbayrakların:

git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter

Ayrıca bakınız


Sizin resminizden, yerel klon repo ve uzak kökeni repo olduğunu görebilirsiniz. Yani en az iki fiziksel dal var. Silinecek üçüncü şube nerede? Üçüncü dal yalnızca yerel klon deposunda bir taahhüde işaret eden bir işaretçi mi?
huggie

6
@ huggie bu oldukça doğru. Git'teki şubeler yalnızca taahhütlere eklenen yer işaretleridir. Yukarıdaki grafiklerimde , yerel klonda (2 dal) Xve origin/Xyer imleri var ve sonra Xuzaktan kumandada (3 dal yapmak) var.

6
Uzaktan izleme dalı için +1. Bu dal, bir başkasının dalını klonladığınızda sorunlara neden olan şeydir. Taahhütlerinizi takip etmeye ve o kişinin şubesine itmek isteyip istemediğinizi sormaya devam eder.
Kermit_ice_tea

1
Sadece grafikler altındır Aferin.
Mogens TrasherDK

1
Gelecek okuyucular uğruna: @Kermit_ice_tea'nın yukarıda bahsettiği şey , bir uzaktan izleme dalı değil, yerel bir daldır (bu cevapta açıklandığı gibi) . Bir zaman yerel şube o uzak dalına varsayılan gelen çekmesi ve itmesiyle o olacak bunun için yapılandırılmış bir "yukarı dalı" vardır. Üzerinde "yukarı akış dalı" bulunan yerel bir dalda "izleme dalı" olarak adlandırılır , bu nedenle benzer terminoloji nedeniyle uzaktan izleme dallarıyla karıştırılması kolaydır .
David P

1520

Bir şubeyi silme adımları:

Uzak dalı silmek için :

git push origin --delete <your_branch>

Silme için yerel şube , sahip üç yolu :

1: git branch -D <branch_name>

2: git branch --delete --force <branch_name>  # Same as -D

3: git branch --delete  <branch_name>         # Error on unmerge

Açıklayın: Tamam, burada neler olduğunu açıklayın!

Basitçe yapmak git push origin --deleteiçin uzaktan şube silme sadece , sonunda şube adını ekleyin ve bu silecektir ve onu itmek için uzaktan aynı anda ...

Ayrıca git branch -D, sadece yerel şube silme hangi sadece ! ...

-D--delete --forcebirleştirilmemiş olsa bile dalı silen standlar (zorla silme), ancak şube birleştirme durumuna ilişkin bir hata atan -dstandları da kullanabilirsiniz --delete...

Adımları göstermek için aşağıdaki resmi de oluşturuyorum :

Git'te uzak ve yerel bir dalı silme


49
git branch -ayerel ve uzak dalları gösterecektir. size diyagram tanıtmak için yardımcı olacaktır.
LoranceChen

4
silmek istediğiniz şubeyi ayarlıyorsanız, yerel şubeyi silmeden önce silmeniz gereken daldan başka bir şubeyi (örneğin: ana) kontrol etmeniz gerektiğini unutmayın.
BaDr Amer

Şubeler başlangıçta silindiğinde, yerel havuzunuz bunu fark etmez. Hala bu dalların yerel olarak önbelleğe alınmış sürümlerine sahip olacaksınız (ki bu gerçekten iyi), ancak git branch -a onları uzak dallar olarak listeleyecektir. Bu bilgileri yerel olarak şu şekilde temizleyebilirsiniz: git remote prune originSilinen şubelerin yerel kopyalarınız bundan kaldırılmaz. Aynı etkigit fetch --prune
vibs2006 8:19

2
Görüntü dikkat dağıtıcı ve çok büyük ve cevaba hiçbir şey katmıyor. Umarım bu SO'da bir trend olmaz.
jmiserez

797

Uzak dalı silmek için aşağıdakileri de kullanabilirsiniz

git push --delete origin serverfix

Hangisi ile aynı şeyi yapar

git push origin :serverfix

ancak hatırlaması daha kolay olabilir.


1
... ve kullanımı daha güvenli: O
cst1992

1
Yerel şubeyi silmeyle ilgili kısmı unuttun: git branch -d <local_branch>veya git branch -D <local_branch>zorla silme
Amit Dash

370

İpucu: Dalları sildiğinizde

git branch -d <branchname> # Deletes local branch

veya

git push origin :<branchname> # Deletes remote branch

yalnızca referanslar silinir. Şube uzaktan kumandayla kaldırılmış olsa da, ona atıflar ekip üyelerinizin yerel depolarında hala mevcuttur. Bu, diğer ekip üyeleri için silinen şubeleri, a git branch -a.

Bunu çözmek için ekip üyeleriniz silinen şubeleri budamak suretiyle

git remote prune <repository>

Bu tipik olarak git remote prune origin.


14
Yukarıdaki git pushişlemin yerel dalı ve uzak dalı sildiğini açıklığa kavuşturmalısınız .
Annika Backstrom

22
git remote pruneEski uzaktan izleme dallarını kaldırmanın biraz eskimiş bir yol olduğunu unutmayın, bunu yapmanın daha yeni yolu git fetch --pruneveya kullanmaktır git fetch -p.

1
@RRMadhav, silinen şubeyi sildikten sonra görmezsiniz, çünkü uzak şubeye referans yerel olarak sizin için kaldırılır. Ekibinizdeki bu şubeyi kontrol eden herkes bu referansa sahip olmaya devam edecek ve şubeyi bulamadıkça yine de görecektir.
pfrenssen

361

Bir dalı silmek istiyorsanız, önce silinecek daldan başka bir şubeye çıkış yapın.

git checkout other_than_branch_to_be_deleted

Yerel şubeyi silme:

git branch -D branch_to_be_deleted

Uzak dalı silme:

git push origin --delete branch_to_be_deleted

260
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>

7
Not -D kuvvetlerinin silme. -dTehlikeli bir şey yapmanız gerekip gerekmediğini hatırlatan her zaman daha iyidir .
Jonathon Reinhart

13
ahahah :) size kalmış: git ağlamasını görmek istiyorsanız -d'yi veya ağlamak istiyorsanız -D'yi kullanın.
Felipe

224

Bu basit: Aşağıdaki komutu çalıştırın:

Git dalını hem yerel olarak hem de uzaktan silmek için, önce bu komutu kullanarak yerel dalı silin:

git branch -d example

( exampleŞube adı burada.)

Bundan sonra, bu komutu kullanarak uzak dalı silin:

git push origin :example

199

Başka bir yaklaşım:

git push --prune origin

UYARI: Bu, yerel olarak bulunmayan tüm uzak dalları siler. Veya daha kapsamlı olarak,

git push --mirror

uzak deponun, deponun yerel kopyası gibi etkili bir şekilde görünmesini sağlar (yerel kafalar, uzaktan kumandalar ve etiketler uzaktan kumandada yansıtılır).


1
git push --prune kökenli gitlab'de benim için hiçbir şey yapmadı: git clone git: //repo.git; git branch -d -r kökeni / bazı dalları; git push - erik kökeni; verim: Her şey güncel; git getirme; yerel olarak silinen şubeleri geri getirir; git push - ayna; şimdi gerçekten gittiler!
eMBee

165

Bash ayarlarımda aşağıdakileri kullanıyorum :

alias git-shoot="git push origin --delete"

Ardından şunları arayabilirsiniz:

git-shoot branchname

11
Ben sadece benim .gitconfig ateş = itme kökeni
delin

Başlangıç ​​noktanız bir Atlassian Stash ise ve dal varsayılan olarak ayarlanmışsa, "Varsayılan olarak geçerli dalın silinmesi reddedilir ..." hatası alırsınız. Stash'daki varsayılan dalı, silmeden önce başka bir dalı işaret edecek şekilde değiştirmek zorunda kaldım.
14'te neoscribe

Bu, yaptığınız gibi son derece basittir, ancak fyi git ayrıca özel komutlar yapmanızı sağlar. Yolunuzda git push origin --delete $1bir dosyaya koyun git-shootve git shoot branchnameo da çalışacaktır.
mahemoff

132

Yerel olarak sil:

Yerel bir dalı silmek için şunları kullanabilirsiniz:

git branch -d <branch_name>

Bir dalı zorla silmek için -Dyerine kullanın -d.

git branch -D <branch_name>

Uzaktan silme:

İki seçenek vardır:

git push origin :branchname

git push origin --delete branchname

Daha sezgisel olduğu için ikinci yolu kullanmanızı öneririm.


129

Ocak 2013'ten bu yana GitHub Delete branch, "Şubeler" sayfanızdaki her bir şubenin yanına bir düğme ekledi .

Alakalı blog yazısı: Şube oluşturma ve silme


3
Ben sadece bu yıl Github kullanmaya başladım, bu yüzden neden bu kadar yüksek bir soru olduğunu ve neden en iyi cevapların hiçbirinin sadece Github web arayüzünden silmeyi önermediğini merak ediyordum! İlginçtir, sadece yeni bir ek.
Cam Jackson

6
Bunu gösterecektim. Düğmenin yerel şubenizi silmeyeceğini unutmayın ... bunun nasıl yapılacağı için şu cevaba bakın: stackoverflow.com/a/10999165/901641
ArtOfWarfare

126

Her iki adımı da tek bir komutla tamamlamak istiyorsanız, aşağıdakilere ekleyerek bunun için bir takma ad oluşturabilirsiniz ~/.gitconfig:

[alias]
    rmbranch = "!f(){ git branch -d ${1} && git push origin --delete ${1}; };f"

Alternatif olarak, bunu komut satırından global yapılandırmanıza ekleyebilirsiniz.

git config --global alias.rmbranch \
'!f(){ git branch -d ${1} && git push origin --delete ${1}; };f'

NOT : -d(küçük harf d) kullanılıyorsa, dal yalnızca birleştirildiyse silinir. Silme işlemini gerçekleştirmeye zorlamak için -D(büyük D harfi) kullanmanız gerekir .


6
Aradığım şey buydu. Kendi kabuk işlevi takma adım işe yaramadı (Beklenmedik EOF) ve nedenini bulamadım, ancak bu harika çalışıyor! Keşke yerine geçecekti made değiştirmek &&ile ;(bazen sadece yerel veya sadece uzaktan mevcuttur) ilk komut hala çalıştırır ikinci başarısız olsa bile bu yüzden.
user1021726

115

Şubenizi yerel ve uzaktan silmek için

  • Ana şubeye ödeme - git checkout master

  • Uzak dalınızı silin - git push origin --delete <branch-name>

  • Yerel şubenizi silin - git branch --delete <branch-name>


112

Bunu kullanarak da yapabilirsiniz git remote prune origin

$ git remote prune origin
Pruning origin
URL: git@example.com/yourrepo.git
 * [pruned] origin/some-branchs

Uzaktan izleme dallarını bu git branch -rlisteden budanır ve siler .


108

Diğer cevaplara ek olarak, genellikle git_remote_branch aracını kullanıyorum. Ekstra bir kurulumdur, ancak uzak dallarla etkileşim kurmanın kolay bir yolunu sunar. Bu durumda, silmek için:

grb delete branch

publishVe trackkomutlarını da oldukça sık kullandığımı görüyorum .


98

Bir tek satırlık bir komut silmek için uzaktan hem yerel ve :

D=branch-name; git branch -D $D; git push origin :$D

Veya aşağıdaki diğer adı ~ / .gitconfig dosyanıza ekleyin . Kullanımı:git kill branch-name

[alias]
    kill = "!f(){ git branch -D \"$1\";  git push origin --delete \"$1\"; };f"

17
⚠️ git branch -DBir betiği birleştirme işleminden geçirmeden bir dalı zorla sildiğinden dikkatli bir şekilde komut dosyasında kullanın . -dGüvenli olmak için kullanın .
caesarsol

94

Şube Silme

Diyelim ki "iletişim formu" dalıyla ilgili çalışmalarımız tamamlandı ve bunu zaten "usta" ya entegre ettik. Artık ihtiyacımız olmadığından (yerel olarak) silebiliriz:

$ git branch -d contact-form

Ve uzak dalı silmek için:

git push origin --delete contact-form

87

Uzak dalı sil

git push origin :<branchname>

Yerel şubeyi sil

git branch -D <branchname>

Yerel şube adımlarını silin:

  1. başka bir şubeye ödeme
  2. yerel şubeyi sil

3
Daha sonra uzaktan şube silme işlemi için "git push" gerekir mi?
Samitha Chathuranga

@SamithaChathuranga hayır, git push origin :<branchname>zaten ' boş ' bir kolu uzaktan kumandaya itiyor (bu nedenle uzak dalı siler)
Michał Szajbe

86

Basitçe söyleyin:

git branch -d <branch-name>
git push origin :<branch-name>

Bu kendi dalınız varsa çalışır. Ancak
repodaki

83
git push origin --delete <branch Name>

hatırlamak daha kolay

git push origin :branchName

81

Şimdi GitHub Desktop uygulaması ile yapabilirsiniz.

Uygulamayı başlattıktan sonra

  1. Şubeyi içeren projeye tıklayın
  2. Silmek istediğiniz şubeye geçin

    Anahtarlama dalı

  3. Şubenin GitHub sunucularından silinmesi için "Şube" menüsünden "Yayından kaldır ..." seçeneğini belirleyin.

    Şubeyi yayından kaldır

  4. Şubenin yerel makinenizden silinmesi için "Şube" menüsünden, " Şube_adı " ... "Sil" seçeneğini belirleyin (şu anda üzerinde çalıştığınız makinenin AKA'sı )

    Yerel şubeyi sil


15
Ben aldatmadım, ama benim düşüncem önemli ölçüde yardımcı olmuyor. Soru açıkça, harici bir program kullanmak zorunda kalmadan daha fazla komut satırı türü yanıt istemektedir, eğer insanlar buraya tıklıyorlarsa, muhtemelen masaüstü yolları için bir github aramayacaklardır.
Daemedeor

12
@Daemedeor, reddediyorum. 2010 yılında OP soruyu sorduğunda, bunu yapmanın kullanıcı arayüzü yolu yoktu ve tek seçenek komut satırı idi. Yalnızca bir komut satırı seçeneği istediğinizi belirtmek için, soruda veya bu durumda mevcut olmayan komut satırı arabirimi etiketinde belirtilmesi gerekir .
Eric

3
Uzak bir dalı silmek için git komutu berbat ve bunu unutmaya eğilimliyim (hem yeni hem de eski). Neyse ki seçeneği olan GUI araçları var. Git Gui, TortoiseGit ve GitHub Desktop var - Keşke Git Uzantıları da bu işlevselliğe sahip olsaydı. Her neyse, hatırladığım şey Uzak bir dalı silmem gerektiğinde Git Gui'yi Git Uzantıları içinden başlatmak.
vezenkov

79

Çok basit:

Uzak dalı silmek için

git push -d origin <branch-name>

Veya

git push origin :<branch-name>

Yerel şubeyi silmek için

git branch -D <branch-name>

2
Uzak dalı silmek --deleteyerine kullanmam gerekiyordu -d.
ZakJ

-dseçeneği için bir takma addır --deleteve eğer --deleteiş varsa -dda çalışmalıdır, zorla veya -Dyerine kullanabileceğiniz bir dalı silmek istiyorsanız . -d--delete
Vivek Maru

78

Yerel olarak silmek için - (normal)

git branch -d my_branch

Şubeniz yeniden temelleme / birleştirme işleminde ilerliyorsa ve bu düzgün bir şekilde yapılmadıysa, bir hata alacağınız anlamına gelir Rebase/Merge in progress, bu durumda dalınızı silemezsiniz.

Yani ya yeniden birleştirme / birleştirme çözmek gerekir. Aksi takdirde, şunu kullanarak zorla silme yapabilirsiniz :

git branch -D my_branch

Uzaktan silmek için :

git push --delete origin my_branch

Aynı şeyi kullanarak şunları yapabilirsiniz:

git push origin :my_branch   # Easy to remember both will do the same.

Grafiksel gösterim:

Resim açıklamasını buraya girin


68

Uzaktan kumandadaki dal ile aynı ada sahip bir etiketiniz varsa bu işe yaramaz:

$ git push origin :branch-or-tag-name
error: dst refspec branch-or-tag-name matches more than one.
error: failed to push some refs to 'git@github.com:SomeName/some-repo.git'

Bu durumda, etiketi değil dalı silmek istediğinizi belirtmeniz gerekir:

git push origin :refs/heads/branch-or-tag-name

Benzer şekilde, kullanmak istediğiniz dal yerine etiketi silmek için:

git push origin :refs/tags/branch-or-tag-name

1
Bu iyi, ancak insanlar gerçekten ilk etapta aynı ad ve aynı adlandırma şemasına sahip dallarını ve etiketlerini adlandırmamalıdır.

3
Benim senaryom, bir dalı bir etikete dönüştürmem ve etiketin dalla aynı ada sahip olması mantıklıydı. Dönüştürerek, şube B'yi A ile birleştirmek ve şube B'deki son taahhüdü B etiketi ile etiketlemek anlamına gelir, böylece şube B'yi sildikten sonra B etiketini kontrol ederek yine de kolayca geri yüklenebilir
Greg

53

Diğer cevapların çoğu hatalara / uyarılara yol açacaktır. Bu yaklaşım, örneğin git branch -D branch_to_deletetam olarak birleştirilmediyse yine de ihtiyacınız olsa da , nispeten aptalca bir kanıttır some_other_branch.

git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete

Uzak dalı sildiyseniz uzaktan budama gerekmez. Yalnızca izlediğiniz bir depoda bulunan en güncel uzaktan kumandaları elde etmek için kullanılır. Ben gözlenen ettik git fetchkaldırmamak, uzaktan kumanda katacak. İşte git remote prune originaslında ne zaman bir şeyler yapacağına bir örnek :

A kullanıcısı yukarıdaki adımları uygular. B kullanıcısı, en güncel uzak dalları görmek için aşağıdaki komutları çalıştırır:

git fetch
git remote prune origin
git branch -r

51

Bu cevap için googling yapmaktan bıktım, bu yüzden crizCraig'in daha önce yayınladığı yanıta benzer bir yaklaşım izledim .

Bash profilime aşağıdakileri ekledim:

function gitdelete(){
    git push origin --delete $1
    git branch -D $1
}

Sonra bir şube ile her bitirdiğimde ( masterörneğin birleştiğinde ) terminalimde aşağıdakileri çalıştırıyorum:

gitdelete my-branch-name

... sonra siler my-branch-namegelen originyerel olarak hem de.


7
Bunun üzerine genişleyen --delete "$@"ve -D "$@"yerine $1birden dalları için idare edecek.
kunl

3
git branch -dDeğişikliklerin birleştirildiğinden emin olmak için önce (küçük harfli 'd) çalıştırmayı ve sonra başarılı olursa ( &&komutlar arasına koy ) itmeyi öneririm
bryn

49

Yürütmeden önce

git branch --delete <branch>

ilk önce uzak dalın tam adının ne olduğunu belirlediğinizden emin olun :

git ls-remote

Bu, tam olarak <branch>değer için ne gireceğinizi söyleyecektir . ( branchbüyük / küçük harfe duyarlıdır!)


46

kullanın:

git push origin :bugfix  # Deletes remote branch
git branch -d bugfix     # Must delete local branch manually

Silmek istediğinizden eminseniz,

git branch -D bugfix

Şimdi silinen uzak dalları temizlemek için çalıştırın

git remote prune origin
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.