Git şubeleri nasıl çalışır? Ana dalı kaldırabilir miyim?


22

2 şubesi, gelişimi ve üretimi olan bir projem var. Master dalını kullanmıyorum ve her git statusyazdığımda dalımın master'dan ne kadar ileride olduğunu söylüyor.

Ana şubeyi silmeye çalıştığımda git branch -d master, uzak git sunucusunda değil, yalnızca yerel havuzumda siler. Herhangi bir fikir?

Yanıtlar:


34

Git'te, şube yalnızca sipariş edilen bir listedir (aka: checkin). Yeni kullanıcılar için biraz kafa karıştırıcı olabilecek bir şey, dalların bir isme sahip olmaları gerekmemesidir (çoğu durumda bir tane istersen de); ve belirli bir dal için özel bir şey yoktur ( masterdal, bir havuzu başlattığınızda sizin için oluşturulmuş olan varsayılan daldır).

Muhtemelen bunu zaten biliyorsunuzdur, ancak Git popüler "Subversion" gibi bazı diğer sürüm kontrol sistemlerinden farklıdır, çünkü her "çalışan kopya" (Subversion dilinde) kendi deposudur ... aslında, özellikle hiçbir şey yok herhangi bir özel kopya için özel; bir kopya genel olarak nihai ürünü saklamak için kullanılan "kanonik" olarak kabul edilmiştir.

Böylece, sorunuza geri dönün ... yerel kopyanızı başlattığınızda klonladığınız "kanonik" depo varsayılan olarak bir "ana" dalı içeriyordu; ve etrafına sıkışmış. Şimdi, ana veri havuzunu içeren bilgisayara erişiminiz varsa, giriş yapabilir ve çalıştırabilirsiniz:

git branch -d master

Ancak, bunu yapamıyorsanız, yine de yerel makinenizden yapabilirsiniz. git branchKomutu bir sahiptir -ruzak depo etkiler seçeneği. Başka bir deyişle, aşağıdaki komutu çalıştırmak işe yaramalıdır:

git branch -d -r master

Her iki durumda da; masterYerel kopyanızın şu anda bulunduğu geliştirme geçmişiyle tamamen birleştirildiğini farz ediyorum . Daha masterönce hiç kullanmadıysanız (yani: yalnızca developmentveya hiç giriş yaptınız production), endişelenecek bir şeyiniz yoktur. Ancak, siz (veya bir başkası) işleri kontrol masterediyorsa, bir sorununuz olabilir. Sen değiştirerek bir silme zorlayabilir -diçin -Dyukarıdaki komutları; ama masterönceden ne olduğunu görmek için kontrol etmenizi tavsiye ederim ! Uzak bilgisayara erişiminiz yoksa, muhtemelen kurtarmanız mümkün olmaz!


Bu arada; Siz (veya başka biri) Git'te yeni iseniz, Git'i John Wiegley tarafından Yukarıdan Aşağıya okumanızı şiddetle tavsiye ederim . Bu makaleyi bulmadan önce Git'i biraz kendi başıma kullanmış olsam da, okuyana kadar nasıl çalıştığını anlamadım. Bu oldukça kullanışlıdır!


3
Orijinal yorumumu yazdığımdan beri, Git'in davranışları biraz değişti. Git 1.7.12'den git branch -d -r masteritibaren uzaktaki dalı siler - yerel kopyanızın uzaktaki dalı hakkındaki bilgisini siler. Bir dahaki sefere git fetch, şube geri olacak! Bunun yerine, koşmak istersiniz git push origin :master. Temelde burada yaptığınız şey, boş bir dalı (boş dalın solundaki :), uzak dalın (sağ tarafındaki dalın adı) üzerine doğru bastırmaktır :.
mparker17

Ayrıca bir depoyu klonladığınızda normalde ana verileri kontrol etmek için varsayılan olarak belirtmelisiniz. Bu, klonladığınız depodaki HEAD ref'e bağlıdır. Master silindikten sonra, HEAD'in varsayılan olarak istediğiniz dalı gösterdiğinden emin olun.
Zitrax,

Senin bağlantı aşağıdan yukarıya Git öldü ama öyle görünüyor bu onaylamak ve belki cevap bağlantıyı güncellemek Could (?) Kastediyorsun metindir?
VEYA Haritacı

VEYA Eşleştiricisi: Bahsettiğim metin bu: Yeni bağlantı için teşekkür ederiz! Cevaptaki bağlantıyı güncelledim.
mparker17

4

mastergit için varsayılan daldır. Git size efendiden ne kadar uzakta olduğunuzu söylerken neden bu kadar korkunç olduğunu bilmiyorum, ancak uzak havuzunuzdaki bir şubeyi silmek istiyorsanız, yerel olarak silmek yeterli değil. Bunun yerine şunu deneyin:

git push origin :master

Bu hiçbir şeyi (iki nokta üst üste kalan kısım) orijinallik sunucunuza itmeyecek ve master'in üzerine yazacaktır. Başka bir deyişle, ana dalı uzaktan silmeli.


Ben alıyorum: uzak: hata: geçerli dalı silmeyi reddediyor: refs / heads / master To github.com ***. Git! 'bazı ref itmek başarısız oldu: usta (yasak geçerli dalı silinmesini) [uzaktan reddedilen] hata github.com *** git.'
Totty.js

1
@Totty belki bu yardımcı olabilir: matthew-brett.github.io/pydagogue/gh_delete_master.html
MEM
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.