GitHub'da kaldırılmış bir şubeyi neden ödeme yapabilirim?


26

GitHub depomuzda, bir iş arkadaşı adlı bir şubeyi kaldırdı release. Ancak git checkout releaseyerel olarak çalıştığımda , her zaman kaldırılan dalıyorum release. Aynen, ben başka bir şube teslim olduğunda bile, silinen releaseile şube git branch -D releaseve tekrar koştu git checkout release.

GitHub deposunda düzeltilecek bir şey var mı, yoksa yerel olarak bir şey mi düzelteyim?


1
Çalıştırdıktan git branch --remotesonra çıktı ne git fetch? git fetch -pSilinen uzak dalları unutmak için budamayı yapmanız gerekebilir .
Stephen Kitt

2
Eğer o dal GitHub'a gönderildiyse ve bundan sonra çekildiyseniz, dalın bir kopyası da vardır. Sığ bir klon veya başka bir şey kullanmadığınız sürece her git deposu kendi içinde tamamlanır.
muru

@StephenKitt: Teşekkürler. git branch --remoteçıktı origin/release. git fetch -pEk bağımsız değişkenler olmadan koşmak mı istiyorsunuz ve tüm silinen uzak dalları budanacak mı?
Tim

1
Evet, git fetch -pek bir argüman olmadığında, silinen tüm uzak dalları eritir.
Stephen Kitt

1
Dağıtılmış sürüm kontrolü dünyasına hoş geldiniz!
chrylis

Yanıtlar:


24

Uzak taraftaki bir şubeyi sildikten sonra, daha önce yerel olarak alınan bu uzak şubeyi yerel olarak görmeye devam edebilirsiniz, bkz:

$ git branch -a
[...]
release
remotes/origin/release
[...]

Yalnızca "sürüm" ü kaldırdınız, "uzaktan / kaynak / sürüm" ü kaldırmadınız. Bu şekilde sil:

$ git branch -rd origin/release

Veya artık uzak tarafta bulunmayan tüm alınmış dalları kaldırın :

$ git remote prune origin 

Teşekkürler. Içinde git branch -rd origin/release, ne anlama -rgeliyor? -dAynı anlama geliyor mu -D? İle git branch -rd origin/releasedeğiştirilebilir git branch -d remotes/origin/releasemi?
Tim

@Tim: Kılavuzdan; -r List or delete (if used with -d) the remote-tracking branches.:; -D:Shortcut for --delete --force.
lüper

Teşekkürler. İle git branch -rd origin/releasedeğiştirilebilir git branch -d remotes/origin/releasemi?
Tim

@Tim hayır uzak dallara -ratıfta bulunur , buna ihtiyaç vardır. Yerel ve uzak şubeler farklı dizinlerde saklanır, karşılaştırılır ve . Ayrıca, adı olmadan silinen yerel bir şubeye de sahip olabilirsiniz . Bu kafa karıştırıcı gelebilir ama sadece oynayabilir, garip isimlerle dallar oluşturabilir ve nasıl göründüğüne bakabilirsiniz . ls -l .git/refs/headsls -l .git/refs/remotesremotes/origin/release-r.git/
rudimeier

15

Şubeler uzaktan silindiğinde, yerel havuzunuzu budamanız gerekir - bunu yapmanın en kolay yolu

git fetch -p

Bu, yerel veri havuzunuzu, uzak veri havuzunda yapılan tüm değişikliklerle, ancak yerel şubelerinizden hiçbirini güncellemeden güncelleyecektir. Bunu çalıştırdıktan sonra,

git branch --remote

artık silinen uzak şubeyi göstermeyecek.

git depoları kendi sisteminizde veya sunucuda olsun, tamamlanmıştır. Böylece, bir havuzu ilk kez klonladığınızda, tam bir kopya elde edersiniz ve yerel git, tüm uzak şubelerin yanı sıra yerel şubelerinizi de “bilir”. Bu bilgiler otomatik olarak senkronize edilmez, bu nedenle meslektaşınız releasesunucudaki şubeyi sildiğinde, yerel git deponuz uzaktaki releaseşube kavramını kaybetmedi . Senkronizasyon git fetch, uzak şubelerdeki tüm yerel bilgileri günceller, böylece sunucudaki durumla eşleşirler (kesinlikle konuşma, uzak havuz, nerede olursa olsun), ancak uzak dallardaki yerel bilgileri silmeden. Budama git fetch -p(veya git fetch --prune, veya git remote prune) ile silinen uzak dallardaki yerel bilgileri siler.


Teşekkürler. "Yerel veri havuzunuzu, uzak veri havuzunda yapılan tüm değişikliklerle güncelleyin, ancak yerel şubelerinizi güncellemeden. Yerel şubelerimin güncellemesi olmadığı için hangi güncellemedir?
Tim

Hepsi uzaktan güncellemeler. Yerel git deponuz yerel şubelerinizi ve uzaktaki şubeleri birbirinden ayırır, ancak uzaktaki şubeler sunucuyla sihirli bir şekilde senkronize edilmez - bunlar da yerel olarak bulunur (yerel git deponuzda depolandığı gibi). Alma, yerel havuzunuzu uzak havuzla senkronize eder ve uzak dalların durumunu günceller; varsayılan olarak silinen uzak dallar uzak dallardaki yerel bilgilerden kaldırılmaz, -p( --prune) bunu zorlar.
Stephen Kitt

Teşekkürler. Neden silerek vermedi releasetarafından şube git branch -D releaseönce git checkout releaseyapmak git checkout releasealma durağı releasedalı?
Tim

1
Çünkü git checkout releasebu ada sahip uzak bir şube varsa, bir şubeyi otomatik olarak yeniden oluşturacaktır.
Stephen Kitt

"Uzak şube" ile, yerel havuzumdaki veya Github depomuzdaki bir şube mi demek istiyorsunuz? Eski ise, yerel depomdaki şubeyi git branch -D releasezaten silmiş release; Daha sonra bir iş arkadaşınız releaseGitHub'daki şubeyi silmiş ; Öyleyse neden "bu adı taşıyan bir uzak dal varsa, otomatik olarak bir dalı yeniden oluşturacağından" emin değilim.
Tim

3

Tim: Git VCS dağıtılır, bu yüzden uzaktaki bölgenize bir repo klonladığınızda her şeyi klonlar (geçmiş). Yani reponu klonladığınızda, serbest bırakma adı verilen bir dalı vardı. Meslektaşınız serbest bırakma şubesini uzaktan sildiğinden, bir kuru erik açana git fetch -pveya bu dalı açıkça silene kadar yerelinizde o dalı olacaktır.


3
Bu cevap, mevcut cevaplardan nasıl farklıdır?
Stephen Rauch

1

Belki biraz teğet olabilir ama bu sitenin perspektifi dalları silmenin genel konusunu anlamada yardımcı olabilir:

http://railsware.com/blog/2014/08/11/git-housekeeping-tutorial-clean-up-outdated-branches-in-local-and-remote-repositories/

Burada daha önce tartışılanların birçoğu ile örtüşüyor, ancak odak oda temizliği üzerine: ortak bir ortamda artık ihtiyaç duyulmayan uzak ve yerel dalları silmek. Özelliklegit branch --merged komut, ana hattınıza (veya önem verdiğiniz dal ne olursa olsun) birleştirilmesi nedeniyle silinmesi güvenli olan dalları tanımlar. Eğer işbirliği yapıyorsanız, bunun gibi bazı meraklısı mini scriptler tarih ve yazarlarla güzel, sindirilebilir bir formatta şeyler sunacaktır.

for branch in `comm -12  <(git branch --merged|awk '{print($1)}') <(git branch -r --merged|awk '{print($1)}'|awk -F \/ '{print($2)}')`; do echo -e `git show --format="%ci %cr %an" $branch | head -n 1` \\t$branch; done | sort -r

(Ne yazık ki "hoş, sindirilebilir", komut dosyalarının biçimlendirilmesinde geçerli değildir.)

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.