HEAD ve master arasındaki fark


189

Git HEADve masteriçindeki Git arasındaki fark nedir ?

GitHub'da bir projenin klonunu yaptım ve değişiklikleri uzaktan kumandaya itmek istiyorum. Ama hangisine itmeliyim?

ekran görüntüsü

Yanıtlar:


162

masterbir dalın sonuna bir referanstır. Kural olarak (ve varsayılan olarak) bu genellikle ana entegrasyon dalıdır, ancak olmak zorunda değildir.

HEADaslında başka bir referansı gösteren özel bir referans türüdür. İşaret edebilir master veya işaret etmeyebilir (şu anda hangi şubenin teslim alındığını gösterecektir). Şubeye bağlı kalmak istediğinizi biliyorsanız master, buna basın.

İşte görsel bir örnek:

alternatif metin

Kendi deponuzda bunu HEADçalıştırarak nereye işaret ettiğini kontrol edebilirsiniz :

$ git symbolic-ref HEAD
refs/heads/master

Ancak, remotes/origin/HEADuzaktaki makinede olduğu için nereye işaret ettiğini bulmak daha zordur.

Burada git referansları hakkında harika bir küçük öğretici var:

http://people.gnome.org/~federico/news-2008-11.html#pushing-and-pulling-with-git-1


1
+1 Benimkinden daha kesin cevap. Bu kavramlar hakkındaki çizimler için stackoverflow.com/questions/3301956/… ve stackoverflow.com/questions/3301956/… adreslerine de bakın .
VonC

37

Basit cevap HEADşu anda bulunduğunuz dalın en son taahhüt bir işaretçi / etiket olmasıdır. mastergit deposunu başlattığınızda (ör. git init) oluşturduğunuz varsayılan daldır .

masterŞubeyi silebilirsiniz (örn. git branch -D master). HEADİşaretçiyi silemezsiniz .


6
" HEADşu anda bulunduğunuz şubenin en son işlemine ilişkin bir işaretçi / etikettir." En iyi yanıltıcı olduğunu düşünüyorum. Daha eski bir taahhüdü kontrol ederseniz, HEAD artık en son taahhüdün değil, bu eski taahhüdün bir göstergesidir. Sağ?
LarsH

2
Haklısın. HEAD son ödemenizdir. Ama savunmamda, Git için, checkoutkomut diğer yaygın SCM sistemlerinde dalların değiştirilmesine eşdeğerdir.
benhorgen

1
Sempati duyuyorum ... Kolayca aynı hatayı yapabilirdim. Fark etmemin tek nedeni, HEAD'in gerçekten ne anlama geldiğini araştırmaya çalışmamdı. Cevabınızı doğru olması için düzenleme şansınız var mı? HEAD'in benim gibi uzman olmayanlar için doğru açıklamalar bulmanın zor bir kavram olduğunu düşünüyorum. HEAD hakkında yanlış bilgi veren internette oturup tavsiyelerde bulunmak bunu biraz daha zorlaştırıyor.
LarsH

2
Yorumunuzun Git HEADişaretçisinin gerçekte ne olduğunu daha iyi anlamak isteyen herkes için harika bir açıklama olduğunu düşünüyorum . Yorumunuzu takdir ediyorum ve başkalarının da yapacağını düşünüyorum. Orijinal yazımın içeriği ve takip yorumunuz birbirini tamamlıyor. Teşekkürler.
benhorgen

4
Bir tekniktir, ancak daha eski bir taahhüdü kontrol ederseniz, artık bir dalda 'bulunmaz'. Bir dal yerine bir taahhütte bulunursanız, "müstakil KAFA" olarak adlandırılan şeye sahip olursunuz, artık 'bir dalda' değilsiniz. 'Bir dalda' olmak, KAFA'nız bir dala başvuruyor demektir ve tanım gereği o dalın en yeni taahhüdünde bulunuyorsunuz. 'B54fe7' teslimini teslim almış olmanız ve bu taahhüdün ana noktaları işaret etmeniz, ana dalda olduğunuz anlamına gelmez. Aynı taahhüdü işaret eden birkaç şube olabilir, eğer HEAD'in işaret ettiği bölüme 'açık' olursunuz.
Jason Goemaat

8

Mevcut dalınızın değişikliklerini yapmanız yeterli

git push origin

ve dalınızı ' B' değiştirir ' origin/B'.
Eğer üzerinde ise masterşube, git itecektir origin/master.
Aslında, eşleşen uzak şubeleri olan yerel şubelerdeki tüm değişiklikleri zorlayacaktır origin. Push.default yapılandırma ayarı tarafından kontrol edilir .
Ayrıca Pro Git kitabında RefSpec'leri zorlamaya bakın .


Ne görüyorsanız da uzaktan reponun tüm refspecs temsil kenar çubuğudur Deneysel GitX çatal ait GitX projesi .

alternatif metin

Bu HEADuzaktan kumanda için varsayılan dal atanır.
Bkz. git remote set-headSayfa :

Bir uzaktan kumanda için varsayılan bir dalı olması gerekmez, ancak uzaktan kumandanın adının belirli bir dal yerine belirtilmesini sağlar.
Örneğin, için varsayılan şube originolarak ayarlanmışsa master, originnormalde belirttiğiniz her yerde belirtilebilir origin/master.

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.