Neden benim 'git şubemin' ustası yok?


96

Ben bir acemiyim ve "usta" dal hakkında okumaya devam ediyorum. "Usta" sadece insanların kullandığı geleneksel bir isim mi yoksa özel bir anlamı var HEADmı?

Sahip olduğum git branchklonu yaptığımda, yalnızca tek bir dal görüyorum - üzerinde olduğum dalı. Hiç "usta" yok. Ben yazarsanız git checkout master(I öğreticiler veya kılavuzları bir sürü içinde gördüğümüz gibi), ben olsun

error: pathspec 'master' did not match any file(s) known to git.

Sadece klonumun neden masterherkesin her zaman var olduğunu ima ettiği gibi görünmediği konusunda kafam karıştı .

Yanıtlar:


76

Çoğu Git deposu masterana (ve varsayılan) dal olarak kullanır - aracılığıyla yeni bir Git deposu başlatırsanız git init, mastervarsayılan olarak kullanıma alınmış olacaktır .

Bununla birlikte, bir depoyu klonlarsanız, sahip olduğunuz varsayılan dal, uzaktan kumandanın HEADişaret ettiği şeydir ( HEADaslında bir dal adını işaret eden sembolik bir başvurudur ). Yani, klonladığınız depoda bir HEADişaret varsa, örneğin, fooklonunuzun sadece bir foodalı olacaktır.

Klonladığınız uzaktan kumanda hala bir masterşubeye sahip olabilir (kontrol edebilirsiniz git ls-remote origin master), ancak bu şubenin yerel bir sürümünü varsayılan olarak oluşturmazsınız, çünkü git cloneyalnızca uzaktan kumandaları kontrol eder HEAD.


6
Ve sonra eğer varsa, ana kaynaktan nasıl kontrol edilir?
Bunyk


33
Depomu git init ile oluşturdum ve ana şube oluşturulmadı. Github ile şube otomatik olarak oluşturulur, ancak Bitbucket ile oluşturulmaz. Mising adımlar atıldı: git add ., git commit -m "Test"ardından git push -u origin master.
Shailen

12
@Amber "ölümcül: ana: geçerli bir SHA1 değil" bu hatayı alıyorum
KK_07k11A0585

1
@Amber git ls-remote origin masterhiçbir şey göstermiyor.
Parisa Khateri

86

Yerel olarak var olmayan ancak uzak depoda bulunan bir şubeyi kullanıma almak için şu komutu kullanabilirsiniz:

git checkout -t -b master origin/master

Bu soru oldukça eski olmasına rağmen yardım etmeye çalıştığınız için teşekkürler. Ama cevabın sorduğum şey değildi.
aberrant80

fatal: Cannot update paths and switch to branch 'master' at the same time.
Raphael Onofre


Github'ın bir ana dal oluşturması ve varsayılan olarak ayarlanması düzeltildi
Raphael Onofre

45

master sadece bir dalın adıdır, yeni bir depo oluşturulduğunda varsayılan olarak oluşturulması dışında sihirli bir şey yoktur.

İle geri ekleyebilirsiniz git checkout -b master.


git checkout -b mastersadece benim için mevcut olandan yeni bir şube ekler.
nnyby

1
@nnyby git checkout -b master, masterher ne olursa olsun bir dal oluşturacaktır HEAD- bu nedenle, başka bir daldaysanız , bunun masterdışında bir dal oluşturacaktır . Halihazırda bir masterşubeniz (şubeyi silmediyseniz veya üzerinde hiç taahhütte bulunmadıysanız) hariç. Zaten bir masterşubeniz varsa, bu komut size sadece bir hata verecektir.
Matt Curtis

2
Sorum şu: Master'ı yanlışlıkla nasıl sildim?
Eric Walker

@EricWalker master, ile silinebilen bir daldır git branch -d master. Git sizi şu anda bulunduğunuz şubeyi silmekten koruyacak olsa da, şubeyi koruyan özel bir şey yoktur master. Daha spesifik olarak, nasıl yaptığını söylemek zor. Belki historybir göz atmak için kabuğunuzun komutunu kullanırsınız?
Matt Curtis

1
Merhaba @MattCurtis, cevabınız şu anda yanıltıcı. git checkout -b mastersadece HEAD orijin / ana olarak ayarlandığında çalışacaktır. Diğer herhangi bir durumda (örneğin, 'geliştirmektesiniz'), git checkout -b mastermevcut HEAD pozisyonuna (örn. ' Geliştirmeden') dayanan 'ana' adlı bir dal oluşturacaktır. Ayrıca hangi şubenin yenisinin en iyisi olacağını da belirtmelisiniz. @Bunyk bu konu hakkında doğru cevaba sahip: stackoverflow.com/a/21330943/287109
AVIDeveloper

24

Aslında tamamen yeni bir depoda aynı sorunu yaşadım. İle bir tane oluşturmayı bile denedim git checkout -b master, ama bu şubeyi yaratmadı. Sonra anladım ki bazı değişiklikler yaparsam ve bunları işlersem git ana şubemi yarattı.


1
Yanıltıcı olan kısım, insanların efendiye sahip olduğumu söylemesidir, ancak ne yapmaya çalışırsam çalışayım, efendiye sahip olmadığımı söyleyen hata mesajları alacağım. (Depom henüz boşken bir geliştirme dalı oluşturmaya çalışıyordum.) Bir şeyi (herhangi bir dosyayı) taahhüt ederek, usta şimdi var oldu ve başka şeyler yapmaya devam edebildim. Diğer cevaplardaki şeyleri denedim ama hiçbir şey yardımcı olmadı. Buradaki tek cevap, oradaki birçok insan için geçerli olabilir. (Git'te hashing hakkında çok şey okudum. Sanırım başlangıçta hiçbir şey yoksa, hash yapacak bir şey yok.)
Fai Ng

16

Benim durumumda bir geliştirme dalı vardı ama ana dal yoktu . Bu nedenle, yeni oluşturulan HEAD'i mevcut şubeye işaret eden depoyu klonladım. Sonra eksik ana dalı yarattım ve HEAD'i yeni ana dalı gösterecek şekilde güncelledim.

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master

Ah işte başlıyoruz .. Ustam falan yoktu. Önce yeni bir dosya ve ilk yürütme ekledim - sonra bunu yaptım. Tılsım gibi çalıştı
Dustin Silk

12

klonladığınız yeni bir repo ise, yine de boş olabilir, bu durumda:

git push -u origin master

muhtemelen çözmelidir.

(benim durumumda yaptım. Bunun aynı sorun olduğundan emin değilim, bu sadece davayı göndermem gerektiğini düşündüm. başkalarına yardımcı olabilir.)


8

Ben de aynı sorunla karşılaştım ve sorunu çözdüm. Bir depoyu başlattığınızda aslında herhangi bir dal yoktur. Bir proje çalıştırmaya başladığınızdagit add . ve ardından git commitana şube oluşturulacaktır.

Herhangi bir şeyi kontrol etmeden ana dalınız olmaz. Bu durumda, buradaki diğer kişilerin önerdiği adımları izlemeniz gerekir.


2
doğru. "git init" ve ardından "git checkout -b somebranchname" yapın ve ana şubeniz
olmayacak

Klasör boşsa da bu yeterli olmayabilir. Yani, bunun çalışması için bazı dosyalar eklemelisiniz. Bu başka bir gariplik aslında hayal kırıklığı yaratıyor.
alehro 01

0

Görünüşe göre ana dalda yapılacak en az bir yerel taahhüt olmalıdır:

git push -u origin master

Öyleyse yaptıysanız git init .ve sonra git remote add origin ..., yine de yapmanız gerekir:

git add ...
git commit -m "..."

0

Github web GUI'den yeni bir depo oluşturursanız, bazen "ana" yerine "ana" adını alırsınız. git statusTerminalinizden gelen komutu kullanarak hangi konumda olduğunuzu görürsünüz. Bazı durumlarda görürsünüzorigin/main .

Uygulamanızı CLI aracılığıyla bir bulut hizmetine göndermeye çalışıyorsanız, 'ana' değil, 'ana' kullanın.

misal: git push heroku main

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.