Soru Git şubesini hem yerel hem de uzaktan nasıl silebilirim?


Bir şubeyi hem yerel olarak hem de uzak proje çatalıma silmek istiyorum GitHub.

Uzak Şubeyi Silme Denemesi Başarısız

$ 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.

Başarılı bir şekilde silmek için farklı olarak ne yapmam gerekiyor? remotes/origin/bugfix hem yerel hem de GitHub'da şube mi?


13843
2018-01-05 01:12


Menşei


Yönetici notu: Bu soruyu cevaplamayı düşünüyorsanız, zaten 40 yanıtın gönderildiğini unutmayın. Yeni cevabınız önemli bir değer katacak mı? - Robert Harvey♦
Not: Git 2.5+ (Q2 2015) için tam mesaj "olacaktır."deleted remote-tracking branch": görmek github.com/git/git/commit/... - VonC


Cevaplar:


Yönetici Özeti

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

Çoğu durumda uzak adın origin.

Yerel Şubeyi Sil

Silmek için yerel dal aşağıdakilerden birini kullanın:

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

Not:  -d seçenek bir takma addır --deleteBu, yalnızca, şubesinin şubesinde zaten tamamen birleştirilmişse dalı siler. Ayrıca kullanabilirsiniz -D, bu bir takma addır --delete --force"Birleştirilmiş durumundan bağımsız olarak" dalı siler. [Kaynak: man git-branch]

Uzak Şubeyi Sil [8-Eylül-2017'de Güncelleme]

İtibariyle Git v1.7.0, silebilirsiniz uzak kullanarak şube

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

hatırlamak daha kolay olabilir

$ git push <remote_name> :<branch_name>

hangi eklendi Git v1.5.0 "uzak bir dalı veya etiketi silmek için."

Başlayan Git v2.8.0 Ayrıca kullanabilirsiniz git push ile -d takma ad olarak seçenek --delete.

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

Uzak Şubeyi Sil [5-Oca-2010'dan Orijinal Cevap]

Bölüm 3’den Pro Git Scott Chacon tarafından:

Uzak Dalları Silme

Uzak bir şube ile iş yaptığınızı varsayalım. Örneğin, siz ve ortak çalışanlarınızın bir özellikle bitmiş olduğunu ve bunu, uzaktaki ana dalınıza (veya sabit kodunuzun bulunduğu şube ne olursa olsun) birleştirdiklerini varsayalım. Oldukça geniş bir sözdizimini kullanarak uzak bir dalı silebilirsiniz. git push [remotename] :[branch]. Serverfix şubenizi sunucudan silmek isterseniz, aşağıdakileri çalıştırın:

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

Boom. Sunucunuzda başka şube yok. Bu sayfaya köpek kulaklığı yapmak 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 daha önce yaptığımız sözdizimi. Eğer bırakırsan [localbranch] Kısmen, şöyle diyorsun: “Benim tarafımda hiçbir şey al ve onu yap [remotebranch].”

Ben verdim git push origin :bugfix ve güzel çalıştı. Scott Chacon haklıydı. köpek kulağı Bu sayfa (veya Yığın Taşması Üzerine bunu cevaplayarak sanal olarak köpek kulağı).

Sonra bunu diğer makinelerde çalıştırmalısınız.

git fetch --all --prune

değişiklikleri yaymak.


17234
2018-01-05 01:13



Sentaksı biliyorsanız git push origin local_branch:remote_branchdaha sonra bir dalı silme sözdizimi git push origin :remote_branch şirin bir şey. Önünde bir boşluk var. : - Marc-André Lafortune
Yapmayı unutma git fetch --all --prune sunucudaki uzak şubeyi sildikten sonra diğer makinelerde. ||| Yerel şubeyi sildikten sonra git branch -d ve uzak şubeyi git push origin --delete diğer makineler hala "eski izleme dallarına" sahip olabilirler. git branch -a). Bunlardan kurtulmak için git fetch --all --prune. - Trevor Boyd Smith
ek olarak @ TrevorBoydSmith's git branch -a tüm şubeleri görmek için ayrıca kullanabilirsiniz git branch -r sadece uzak şubeleri görüntülemek için. Ayrıca bakınız git remote show origin - kaynak: gitready.com/intermediate/2009/02/13/list-remote-branches.html - Sandra
Koşmak zorundaydım git branch -D Branch_Name yerel şubeden kurtulmak - Kolob Canyon
@KolobCanyon Sadece şube başka bir şubeye birleştirilmemişse -D'yi kullanmak zorundasınız. - BTRUE


Matthew'un cevabı kaldırmak için harika uzak şubeler ve ben de açıklamaları takdir ediyorum, ama iki komut arasında basit bir ayrım yapmak için:

Çıkarmak için yerel şube makinenizden:

git branch -d {the_local_branch} (Kullanım -D yerine birleştirilmiş durumu denetlemeden şube silmeye zorlamak için)

Çıkarmak için uzak şube sunucudan:

git push origin --delete {the_remote_branch}

Referans: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote


2872
2018-06-12 14:51



@megido iyi -D zorla siler, -d Henüz birleştirilmemişse size bir uyarı verir. - TankorSmash
Yerel şubeniz master ile birleşmiyorsa ve koştuysanız 'git branch -d your_branch o zaman hata yapacaksın error: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'. - geeks
-D yerine -d kullanmayı öneririm çünkü daha güvenlidir. Eğer -d, unmerged commits nedeniyle başarısız olursa o zaman bunu değerlendirmeniz gerekir ve eğer kaldırılması kesinlikle uygunsa o zaman -D kullanın. - rooby
Uzak şubelerin kaldırıldığı depo klonlarına sahip diğer kullanıcılar git remote prune <name>(Örneğin. git remote prune origin) Uzaktan kumandada artık bulunmayan eski branşları yerel olarak kaldırmak için. - code_dredd
Şayet çatalınızdaki çatalınız (her zaman kaynak değil), uygun depoyu kullanın. Örneğin. git push myRepo: mrbranchtodelete - Dhanuka777


Kısa Cevaplar

Aşağıdaki komutların daha ayrıntılı açıklamalarını isterseniz, sonraki bölümdeki uzun cevaplara bakın.

Uzak şubeyi silme:

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

Yerel şubeyi silme:

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

Yerel uzaktan izleme dalını silme:

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

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

Uzun Cevap: Silmek için 3 farklı şube var!

Hem yerel hem de uzaktaki şubeleri silmekle uğraşırken 3 farklı dal var:

  1. Yerel şube X.
  2. Uzak kökeni dal X.
  3. Yerel uzaktan izleme dalı origin/X bu uzak şube izler X.

Visualization of 3 branches

Kullanılan orijinal poster

git branch -rd origin/bugfix

sadece onun silinmiş yerel uzaktan izleme dalı  origin/bugfixve gerçek uzak şube değil bugfix üzerinde origin.

Diagram 2

Bu gerçek uzak dalı silmek için, ihtiyacın var

git push origin --delete bugfix

Diagram 3

ek detaylar

Aşağıdaki bölümlerde uzak ve uzak izleme dallarını silerken göz önünde bulundurulması gereken ek detaylar açıklanmaktadır.

Uzaktaki şubeleri silmek için iterek uzaktan takip eden şubeleri de siler.

Uzak şube silmeyi unutmayın X kullanarak komut satırından git push  yerel uzaktan izleme dalını da silecek  origin/XBu nedenle, eski uzaktan izleme dalını git fetch --prune veya git fetch -p, yine de yaptıysan incinmez.

Uzaktan izleme dalını doğrulayabilirsiniz. origin/X aşağıdakileri çalıştırarak da silindi:

# 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 şube kökeni / X budama

Uzak şubenizi silmediyseniz X Komut satırından (yukarıdaki gibi), o zaman yerel repo'unuz hala (artık kullanılmayan) uzaktan izleme dalını içerecektir origin/X. Örneğin uzak bir şubeyi doğrudan GitHub'un web arabiriminden sildiyseniz, bu durum oluşabilir.

Bu eski uzaktan izleme dallarını kaldırmanın tipik bir yolu (Git sürümü 1.6.6'dan beri) yalnızca çalıştırmaktır git fetch ile --prune veya daha kısa -p. Bu, uzaktan kumandada artık bulunmayan tüm uzak dallar için tüm eski uzak izleme dallarını kaldırır.:

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

İşte ilgili alıntı 1.6.6 sürüm notları (vurgu benim):

"git getir" öğrenildi  --all ve --multipleseçenekleri   birçok depo, ve --prune uzaktan izlemeyi kaldırma seçeneği   bayat gitti dalları.  Bu "git uzaktan güncelleştirme" ve "git"   uzaktan kuru erik "daha az gerekli" (kaldırmak için bir plan yoktur) uzaktan   "ne" ne de "uzak" yazısını güncelle ").

Eski uzaktan izleme branşları için yukarıdaki otomatik budama alternatif

Alternatif olarak, eski yerel uzaktan izleme dallarınızı budamak yerine git fetch -p, ekstra ağ operasyonundan kaçınabilirsiniz sadece şube (ler) ile el --remote veya -r bayraklar:

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

Ayrıca bakınız


1641
2018-05-30 18:32



Resminizden, yerel klon repo ve uzak menşeli repo olduğunu görebiliyorum. Yani en az iki fiziksel dal var. Üçüncü şube nerede silinecek? Üçüncü şube sadece yerel klon repo sürecinde bir taahhüt işaret eden bir işaretçi mi? - huggie
@huggie bu oldukça doğru. Git'deki şubeler, yalnızca taahhütlere eklenen yer imleridir. Yani yukarıdaki grafiklerimde, X ve origin/X yerel klondaki (2 şube) yer imleri ve daha sonra X uzaktan kumandada (3 şube yapmak).
Uzaktan izleme dalı için +1. Bu şube, başkasının şubesini klonladığınızda sorunlara neden olan şeydir. İşlemlerinizi takip etmeye devam eder ve o kişinin şubesine itmek isteyip istemediğinizi sorar. - Kermit_ice_tea


Bir dalı silmek için adımlar:

silmek için uzak şube:

git push origin --delete <your_branch> 

silmek için yerel şubeüç yolun var:

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çıklamak: Tamam, burada neler olduğunu açıkla!

Sadece yapmak git push origin --delete için SADECE uzak şubenizi silin, sonunda dalın adını ekleyin ve bu silecek ve aynı anda uzaktan iter ...

Ayrıca, git branch -Dsadece yerel şubeyi silmek BİR TEK! ...

-D anlamına gelir --delete --force Bu da birleştirilmiş olmayan (kuvvet silme) şubeyi silecektir, ancak aynı zamanda -d hangi için duruyor --delete şube birleştirme durumuyla ilgili bir hata atan ...

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

delete a remote and local branch in git


927
2018-06-27 13:13



git branch -a yerel ve uzak şubeleri gösterecektir.Bu size tanıtmak için yardımcı olacaktır. - LoranceChen
Silmek istediğiniz şubeye ayarlıyorsanız, yerel şubeyi silmeden önce silmeniz gereken bir alandan (ör: master) bir şube ayırmanız gerektiğini unutmayın. - BaDr Amer
[konu dışı] yukarıdaki harika görüntüyü nasıl oluşturdunuz? - Lucas Caton


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

git push --delete origin serverfix

Hangisi aynı şey

git push origin :serverfix

ama hatırlamak daha kolay olabilir.


703
2017-10-27 22:22



... ve daha güvenli kullanım: O - cst1992
Yerel şubeyi silmekle ilgili kısmı unuttun: git branch -d <local_branch> veya git branch -D <local_branch> zorla silmek için - Amit Dash


Bir şubeyi silmek isterseniz, silinecek branştan başka şubeye ilk çıkış.

git checkout other_than_branch_to_be_deleted

Yerel şubeyi silme:

git branch -D branch_to_be_deleted

Uzak şubeyi silme:

git push origin --delete branch_to_be_deleted

344
2017-10-07 13:52





İpucu: Şube kullanarak sildiğinizde

git branch -d <branchname>    # deletes local branch

veya

git push origin :<branchname> # deletes remote branch

sadece referanslar silinir. Şube uzaktan kumandada kaldırılsa bile, bununla ilgili referanslar, ekip üyelerinizin yerel depolarında hala mevcuttur. Bu, diğer ekip üyeleri için silinen şubelerin, bir git branch -a.

Bunu çözmek için ekip üyeleriniz silinmiş şubeleri

git remote prune <repository>

Bu tipik olarak git remote prune origin.


329
2017-11-07 13:02



Yukarıdakileri açıklığa kavuşturmalısın git push işlem yerel şube siler ve uzak şube. - Annika Backstrom
Bunu not et git remote prune eski uzaktan izleme dallarını kaldırmak için biraz eskimiş bir yoldur, bunu yapmanın daha yeni yolu kullanmaktır git fetch --prune veya git fetch -p.
@RRMadhav, silinen şubeyi sildiğinizden sonra göremezsiniz, çünkü uzak şubeye yapılan referans yerel olarak sizin için kaldırılacaktır. Ekibinizde bu dalı kontrol eden başka bir kişi hala bu referansa sahip olacak ve şubeye kurulamadıkça hala görecektir. - pfrenssen