Git'te HEAD nedir?


Yanıtlar:


775

HEAD'ı "mevcut şube" olarak düşünebilirsiniz. Dalları değiştirdiğinizde git checkout, HEAD revizyonu yeni dalın ucunu gösterecek şekilde değişir.

HEAD'in neyi işaret ettiğini görebilirsiniz:

cat .git/HEAD

Benim durumumda çıktı:

$ cat .git/HEAD
ref: refs/heads/master

HEAD'ın bir dal adıyla ilişkili olmayan belirli bir düzeltmeye başvurması mümkündür. Bu duruma müstakil KAFA denir .


53
Yani git HEAD hangi BRANCH üzerinde olduğunuza göre bağlama bağlıdır, değil mi? Hatta daha da sen bir geliştirici olarak? Sanırım soruyorum, Git HEAD her depo için havuz çapında küresel bir şey mi yoksa bireysel mi olacak?
bobobobo

91
@bobobobo: Bu doğru, HEAD geçerli dalı işaret eden bir işaretçi gibidir. Farklı bir şubeye ödeme yaptığınızda, HEAD yenisini işaret edecek şekilde değişir. Mevcut HEAD her depo için yereldir ve bu nedenle her geliştirici için ayrıdır.
Greg Hewgill

16
@Meng Bu bana yardımcı oldu, umarım yardımcı olur: marklodato.github.com/visual-git-guide/index-en.html
raphael

54
@ 動靜 能量: HEAD herhangi bir taahhüde işaret edebilir , herhangi bir şubedeki son taahhüt olmasına gerek yoktur. (HEAD, bir şubedeki son taahhüt olmayan bir taahhüdü işaret ettiğinde, bu bir "bağımsız HEAD" dir).
Greg Hewgill

127
BAŞ olduğunu değil "geçerli dal". Is, çalışan ağacın mevcut durumunun başlatıldığı taahhüde verilen addır. Daha pratik terimlerle, check-out taahhüdüne sembolik bir referans olarak düşünülebilir.
Ben Collins

184

Başkalarına alıntı yapmak için :

Bir kafa basitçe bir taahhüt nesnesine referanstır. Her kafanın bir adı vardır (dal adı veya etiket adı, vb.). Varsayılan olarak, her depoda master adı verilen bir kafa vardır. Bir havuz herhangi bir sayıda kafa içerebilir. Herhangi bir zamanda, bir kafa “mevcut kafa” olarak seçilir. Bu kafa HEAD ile her zaman başkentte takma adıdır ".

Bu farka dikkat edin: “kafa” (küçük harf), depodaki adlandırılmış kafalardan herhangi birini ifade eder; “HEAD” (büyük harf) sadece aktif durumda olan kafa anlamına gelir. Bu ayrım Git belgelerinde sıklıkla kullanılır.

Git'in iç işleyişini hızlı bir şekilde kapsayan bir başka iyi kaynak (ve bunun için kafaların / HEAD'ın daha iyi anlaşılması) burada bulunabilir . Kaynaklar (ref :) veya başkanlar veya şubeler, taahhüt tarihinde taahhüt edilen post-it notlar gibi düşünülebilir. Genellikle kaydedilmesini dizisinin ucuna işaret, ancak etrafında hareket ettirilebilir git checkoutveya git resetvs.


Bundan: "Her kafanın bir adı vardır". Ve "bir kafa" mevcut kafa "olarak seçilir. Bu kafa HEAD ile takma "#:. Bu yüzden "HEAD" "bağımsız HEAD" durumu anlamına gelmez sonucuna varıyorum.
gxyd

1
@gxyd, HEAD 'kafaya' işaret etmiyorsa, bağımsız bir HEAD'dir. git checkout HEAD~2Bilinen bir kafanın taahhüt kimliği olmayan, belirttiğiniz taahhüdün taahhüt kimliğine ( örneğin, kullanarak ) işaret ediyor. Daha ayrıntılı bir açıklama için eagain.net/articles/git-for-computer-scientists adresindeki makaleye bakın .
Silfheed

1
@Silfheed: Genel olarak bu cevabın kavramsal olarak kabul edilen cevaptan daha sağlam olduğunu düşünüyorum (bir şubeye atıfta bulunmak için küçük harf "head" kullanılmasına rağmen birçok insanın kafasını karıştırıyor). Ancak git revertbir dalı uçta olmamak için iyi bir örnek değildir, çünkü git revertsadece bazı yeni taahhütler oluşturur ve mevcut dalı (yeni) uçta bırakır.
LarsH

1
"Bu bilinen bir başlığın taahhüt kimliği değildir" - Aslında, ayrılmış bir HEAD aynı zamanda bilinen bir başkanın (veya birkaç başkanın) taahhüt kimliği olan bir taahhüt kimliğine işaret ediyor olabilir . Ayrılmasını sağlayan şey, HEAD'in bir kafaya değil, doğrudan taahhüt kimliğine işaret ediyor olmasıdır. Bu, gelecekteki commits, resets, vb . Davranışlarını etkileyecektir
LarsH

1
@LarsH: Ayrılmış bir HEAD üzerinde referans yerine taahhüt kimliğine işaret eden iyi bir nokta. Bunu gerçekten .git / HEAD'e bakarak doğrulayabilirsiniz. Ayrılmışsa, bilinen bir kafa ile aynı taahhüt olsa bile, bir taahhüdün karmasını içerecektir. Eğer takılıysa, kafanın yolunu içerecektir (yani 'ref: refs / heads / bob'). Geri döndürme komutuna gelince, 8 yıl sonra bu yazım hatasını hiç yakalamadım. Git reset, belirli bir başlamayı belirli bir işleme göre ayarlamanıza olanak tanır.
Silfheed

62

Ben github geliştirici Scott Chacon [ video referansı ] bu tanımı tavsiye :

Head şu anki dalınız. Sembolik bir referanstır. Bir dal için bir referanstır. Her zaman HEAD'ınız vardır, ancak HEAD bu işaretçilerden birini, bulunduğunuz dallardan birini işaret edecektir. Bir sonraki taahhüdünüzün ebeveyni. Çalışma dizininize en son teslim alınan şey budur ... Bu, çalışma dizininizin en son bilinen durumudur.

Tüm video tüm git sistemine adil bir giriş yapacak, bu yüzden de zamanınız varsa hepsini izlemenizi tavsiye ederim.


34
Yani gerçek def "bir sonraki taahhüdünüzün ebeveyni" dir
nicolas

1
ve ayrıca "hareket edecek bir sonraki şubeye işaret eden şey"
nicolas

@nicolas - Bunun doğru olduğunu düşünmüyorum . HEAD herhangi bir taahhüde işaret edebilir, bir şubeye işaret etmek zorunda değildir - değilken, "bağımsız HEAD" modundasınız demektir.
scubbo

23
Video harika, ancak ne yazık ki, Stack Overflow için uygun olmayan bir cevap veriyor. Video gelecekte bir zaman kaldırılırsa ne olur? O zaman bağlantınız hiçbir şeye işaret etmeyecektir. Daha iyi bir cevap, Scott'ın videoda söylediklerinin bir transkriptini içerir.

2
Scott, HEAD'ın bir şubeye işaretçi olduğunu söyledi. Ancak HEAD eski taahhütlere de işaret edebilir. Bu çok kafa karıştırıcı.
Fixee

60

HEAD, şu anda bulunduğunuz yerel şubeye işaret eden özel bir işaretçi.

Gönderen Pro Git kitabının 3.1 Git dallanma - Ceviz Kabuğundaki Şube , bölümdeki Yeni Şubesi oluşturma :

Yeni bir şube oluşturursanız ne olur? Bunu yapmak, hareket etmeniz için yeni bir işaretçi oluşturur. Diyelim ki test adlı yeni bir dal oluşturdunuz. Bunu git branch komutuyla yaparsınız:

$ git branch testing 

Bu, şu anda bulunduğunuz aynı taahhütte yeni bir işaretçi oluşturur

resim açıklamasını buraya girin

Git şu anda hangi şubede olduğunuzu nasıl biliyor? HEAD adında özel bir işaretçi tutar. Bunun, Subversion veya CVS gibi alışık olabileceğiniz diğer VCS'lerde HEAD konseptinden çok farklı olduğunu unutmayın. Git'te bu, şu anda bulunduğunuz yerel şubeye bir işarettir. Bu durumda, hâlâ ustasınız. Git branch komutu yalnızca yeni bir dal oluşturdu - bu dala geçmedi.

resim açıklamasını buraya girin


4
Güzel, olsa da ayrı HEAD davasını gösteren bir resim kullanabilirsiniz
Don Hatch

@DonHatch, Müstakil HEAD için iyi açıklama stackoverflow.com/a/35301963/1074179
Alexandr

3
Güzel cevap. Şubeler etiketli taahhütlerden başka bir şey değildir, yeni taahhütler verdiğinizde bu etiket yeni yeni taahhüde taşınır. Etiketi olmayan bir taahhüdü kontrol ettiğinizde, bu etiket bağımsız HEAD durumundadır. Bu, HEAD'ın şube etiketi olmayan bir taahhüdü işaret ettiği anlamına gelir. 34ac2Yukarıdaki örnekte ödeme yaparsanız , şimdi HEAD bu taahhüdü işaret ediyor ve buna müstakil HEAD deniyor. Bu durumda, değişiklikler yapabilir, deneyebilir ve değişiklikler uygulayabilirsiniz, ancak farklı bir şubeyi teslim aldığınızda, elbette yeni bir şube oluşturmadığınız sürece tüm değişikliklerinizi kaybedersiniz.
sleepwalkerfx

1
@sleepwalkerfx ancak bir şube etiketi olan ve hala ayrılmış kafa durumunda olan bir taahhüdü kontrol edebilirsiniz, çünkü HEAD artık şube etiketine değil, şubenin taahhüt kimliğine işaret ediyor
Marc

1
@sleepwalkerfx Sanırım bu noktada anlambilimden bahsediyoruz. Bir şube etiketinin, belirli bir taahhüdün metin referansı olduğu konusunda haklısınız. Ancak bu bir taahhüt değildir. Eğer böyle bir git logşey yaptıysanız ve böyle bir şey varsa commit ad0265... HEAD -> foo ..., fooşube id yapmak için bir referans anlamına gelir ad0265. Metin referansının bir kontrolünün yapılması foobağımsız bir başlık değildir. Taahhüt kimliğinin bir kontrolünün yapılması ad0265kopuk bir kafaya neden olur. İletişim kurduğunuz şeyin bazı inceliklerini kaçırıyor olabilirim. Umarım bu metin duvarı nerede kaybolduğumu keşfetmeye yardımcı olur.
Marc

40

"Ayrı HEAD" adı verilen özel bir durum olmadığı varsayılırsa, O'Reilly Git kitabında belirtildiği gibi, 2. baskı, s.69, şu HEADanlama gelir:

HEADher zaman mevcut daldaki en son taahhüt anlamına gelir. Şubeleri değiştirdiğinizde HEAD, yeni şubenin en son taahhüdüne bakacak şekilde güncellenir.

yani

HEADolan cari şube "ucu" .

Biz kullanabileceği Not HEADişlemek En son başvurmak için, ve kullanım HEAD~ucu önce taahhüt olarak ve HEAD~~ya HEAD~2daha erken işlemek ve benzeri şekilde.


27

Bu cevapların bir kısmında belki de ince ama önemli bir yanlış anlama var. Temizlemek için cevabımı ekleyeceğimi düşündüm.

Nedir HEAD?

BAŞ sen

HEADtaahhüt geçmişinizde nerede olduğunuzu gösteren sembolik bir referanstır. Nereye giderseniz gidin, ne yaparsanız yapın, bir gölge gibi sizi izler. Bir taahhütte bulunursanız HEAD, hareket eder. Bir şeyi kontrol ederseniz HEAD, hareket edecektir. Ne yaparsanız yapın, taahhüt geçmişinizde yeni bir yere HEADtaşındıysanız, sizinle birlikte taşındı. Sık rastlanan bir yanılgıya değinmek için: kendinizi ayıramazsınız HEAD. Ayrılmış bir HEAD durumu bu değildir. Kendinizi şu şekilde düşünürseniz: "oh hayır, müstakil HEAD durumdayım! HEAD'ımı kaybettim!" Unutma, bu senin kafan. HEAD sensin. HEAD'tan ayrılmadınız, siz ve HEAD'iniz başka bir şeyden ayrıldınız.

HEAD ne ekleyebilir?

HEADbir taahhüde işaret edebilir, evet, ama tipik olarak göstermez. Tekrar söyleyeyim. Genellikle HEADbir taahhüdü işaret etmez. Bir dal başvurusuna işaret eder. Bu dala eklenir ve belirli şeyleri (örneğin commitveya reset) yaptığınızda, ekli dal birlikte hareket edecektir HEAD. Kaputun altına bakarak neye işaret ettiğini görebilirsiniz.

cat .git/HEAD

Normalde böyle bir şey alırsınız:

ref: refs/heads/master

Bazen böyle bir şey elde edersiniz:

a3c485d9688e3c6bc14b06ca1529f0e78edd3f86

HEADDoğrudan bir taahhüdü işaret ettiğinde bu olur . Buna müstakil HEAD denir, çünkü HEADdal referansından başka bir şeye işaret eder. Bu durumda bir taahhütte bulunursanız master, artık bağlı HEADdeğilsiniz, artık sizinle birlikte hareket etmeyecektir. Bu taahhüdün nerede olduğu önemli değil. Ana dalınızla aynı taahhütte olabilirsiniz, ancak daldan HEADziyade taahhüdü işaret ediyorsa, koparılır ve yeni bir taahhüt, bir şube referansıyla ilişkilendirilmez.

Aşağıdaki egzersizi denerseniz buna grafiksel olarak bakabilirsiniz. Git deposundan bunu çalıştırın. Biraz farklı bir şey elde edersiniz, ancak anahtar bitleri orada olacaktır. Taahhüdü doğrudan kontrol etme zamanı geldiğinde, sadece ilk çıktıdan aldığınız kısaltılmış hash'ı kullanın (işte burada a3c485d).

git checkout master
git log --pretty=format:"%h:  %d" -1
# a3c485d:   (HEAD -> master)

git checkout a3c485d -q # (-q is for dramatic effect)
git log --pretty=format:"%h:  %d" -1   
# a3c485d:   (HEAD, master)

Tamam, bu yüzden buradaki çıktıda küçük bir fark var. Taahhüdü doğrudan kontrol etmek (dal yerine) bize ok yerine virgül verir. Ne düşünüyorsun, biz bağımsız bir HEAD durumunda mıyız? HEAD, bir şube adıyla ilişkili belirli bir düzeltmeyi ifade ediyor. Biz hala üzerinde biz ana dalı değil?

Şimdi dene:

git status
# HEAD detached at a3c485d

Hayır! Biz 'müstakil HEAD' durumundayız.

Sen aynı temsilini görebilirsiniz (HEAD -> branch)vs. (HEAD, branch)ile git log -1.

Sonuç olarak

HEADsensin. Nerede olursanız olun, teslim aldığınız her şeye işaret eder. Genellikle bu bir taahhüt değildir, bir daldır. Bir taahhüdü (veya etiketi) işaret ediyorsa HEAD , bir şubenin de işaret ettiği aynı taahhüt (veya etiket) olsa bile, siz (ve HEAD) o şubeden ayrıldınız. Size bağlı bir şubeniz olmadığı için, yeni taahhütlerde bulunduğunuzda şube sizi takip etmeyecektir. HEADancak, olacaktır.


1
Bu yanıtı seviyorum, çünkü belgeler gerçeği açıklarken yazılım gerçeği tanımlar. .git/HEADyazılımın HEAD olduğunu düşündüğü şeydir.
Don Branson

2
Sadece kavramsal tanımı için, bu kabul edilen cevap olmalıdır.
ata

22

HEADçalışma kopyanızın işaret ettiği mevcut taahhüdü, yani şu anda teslim aldığınız taahhüdü belirtir. Git revizyonlarının belirtilmesine ilişkin resmi Linux Çekirdeği belgelerinden :

HEAD Çalışma ağacındaki değişiklikleri temel aldığınız taahhüdü adlandırır.

Ancak, yaklaşmakta olan sürümde Git 1.8.4, @ayrıca için bir kısaltma olarak kullanılabilir HEADolarak, onun Git Suçlama blog Git katkıyı Junio C Hamano tarafından da belirtildiği :

"HEAD" yazmak yerine "@" diyebilirsiniz, örneğin "git log @".

Stack Overflow kullanıcısı VonC , başka bir soruya cevabında neden @kısayol olarak seçildiğine dair bazı ilginç bilgiler de buldu .

Ayrıca, bazı ortamlarda HEAD, özellikle büyük / küçük harf duyarsız dosya sistemleri, özellikle Windows ve OS X kullanan işletim sistemlerinde büyük harf kullanımı gerekli değildir .


17

Şube oluşturma ve dallarda oynamaya göz atın

HEAD aslında içeriği HEAD değişkeninin nereye başvurduğunu belirleyen bir dosyadır:

$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
35ede5c916f88d8ba5a9dd6afd69fcaf773f70ed

Bu depoda, HEAD dosyasının içeriği refs / heads / master adlı ikinci bir dosyaya atıfta bulunur . Refs / heads / master dosyası , ana daldaki en son işlemlerin karmasını içerir.

Sonuç HEAD, .git / refs / heads / master dosyasındaki ana şube taahhüdüne işaret eder .

resim açıklamasını buraya girin


1
Dikkat: gitguys.com bağlantısı park edilmiş bir alana işaret ediyor gibi görünüyor.
MKesper

14

Greg Hewgil'in kabul edilen cevabında birkaç şeyi detaylandırmak istiyorum. Göre Git Cep Rehberi

Şube:

dalın kendisi, adlandırılan komuttan (dalın “ucu”) taahhüt grafiğinde ulaşılabilen tüm noktalar olarak tanımlanır.

KAFA: Özel bir Ref tipi

Özel ref HEAD hangi şubede olduğunuzu belirler ...

refs

Git iki tür referans tanımlar veya “refs” olarak adlandırdığı işaretçiler olarak adlandırılır:

  • Doğrudan bir nesne kimliğine işaret eden basit bir ref (genellikle bir taahhüt veya etiket)
  • Başka bir ref'ye (basit veya sembolik) işaret eden sembolik bir ref (veya symref)

Greg'in belirttiği gibi, HEAD "bağımsız bir durumda" olabilir. Dolayısıyla HEAD ya basit bir ref (ayrılmış bir HEAD için) ya da bir symref olabilir.

HEAD mevcut bir dal için sembolik bir referanssa, o dalda “açıksınız”. Öte yandan, HEAD bir taahhüdü doğrudan SHA-1 kimliğiyle adlandırmak için basit bir ref ise, o zaman herhangi bir dalda “değil”, daha önce bazılarına baktığınızda gerçekleşen “müstakil KAFA” modundasınız. inceleme taahhüdü.


Teşekkürler, bayım! Bu, daha önceki bir taahhüdü kontrol ettiğinizde ne olacağını açıklayan ilk cevaptır. Git web sitesindeki kitaba baktığımda, "müstakil bir KAFA" nın sadece garip bir yeniden basma işi yaptıysanız girdiğiniz patolojik bir durum olduğu izlenimini edindim. Ancak daha önceki bir taahhüdü kontrol etmek garip bir şey değildir ve bunu yaptığınızda HEAD "mevcut dalın ucu" değildir. İlk defa anladığım gibi hissediyorum.
Nat Kuhn

7

Bence 'HEAD' şu anki çıkış işlemidir. Başka bir deyişle, 'HEAD' şu anda kullanıma alınmış olan taahhüdü işaret eder.

Eğer sadece klonlanmış ve teslim değil, ne işaret, muhtemelen bazı geçersiz konum bilmiyorum.


Evet, özel referans HEADşu anda check-out yaptığınız işlemdir. Ayrıntılar için kılavuza bakınız (ilgili paragraf hemen Şekil 3.4'ü takip eder).
Calrion

1
Bir havuzu klonlarsanız, git varsayılan olarak masterdalı kontrol eder - böylece HEAD master'ı gösterir.
sleske

1
@sleske özel seçenekleri olmayan bir havuzu klonlarsanız git uzaktaki kafanı kontrol eder. genellikle master, ama her zaman değil. Bkz.remote set-head
De Novo

Önceki yorumum, remote set-headyalnızca yerel varsayılan dalı etkileyen ve sunucudaki varsayılanı değiştirmeyen başvuru dışında doğruydu .
De Novo

5

Kafa, o anda teslim alınmış dalın ucunu gösterir.

resim açıklamasını buraya girin

Deponuzda bir .git klasörü var. Dosyayı şu konumda açın: .git \ refs \ heads. Bu dosyadaki (sha-1 karma) kodu (çoğu durumda master) en son işlem olacaktır, yani komutun çıktısında görülen kod git log. .Git klasörü hakkında daha fazla bilgi: http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html


1
Mevcut dalın ucunun en son taahhüdü işaret ettiği yaygın bir yanlış anlamadır. Tipik olarak bu doğrudur, ancak aynı zamanda nadir değildir git reset HEAD^ve daha sonra en son taahhüt (eski uç) artık dalın ucuyla işaret edilmez .
LarsH

4

Doğru cevaplarda verilen noktayı eve git reflog HEADgötürmenin harika bir yolu, koşmaktır, KAFA'nın işaret ettiği tüm yerlerin bir geçmişini alırsınız.


4

Önceki tüm cevapları okuduktan sonra hala daha fazla netlik istedim. Resmi git web sitesindeki bu blog http://git-scm.com/blog bana aradığım şeyi verdi:

HEAD: Anlık görüntüyü son veren işaretçi, sonraki ebeveyn

Git'te BAŞ olan işaretçi bir dönüş olduğunu akım şube referansı için işaretçi yaptığınız veya son senin çalışma dizine teslim edildi işlemek son tamamlama. Bu aynı zamanda yapacağınız bir sonraki taahhüdün de ebeveyni olacağı anlamına gelir. HEAD, son taahhüdünüzün fotoğrafı olduğu için bunu düşünmek genellikle en basit olanıdır.


1
HEAD: son taahhüt anlık görüntüsü, bir sonraki ebeveyn doğru değil. HEADbir taahhüt değildir; o işaret biri.
jub0bs

Alaycılığa gerek yok; düzenlemenizden önce, teklif doğru olsa da, büyük kalın harfler bir basitleştirme ve biraz yanıltıcıydı. Şimdi daha iyi.
jub0bs

1
Bir sonraki satırı okumak İSE: Git'te BAŞ olan işaretçi bir dönüş olduğunu akım şube referansı için işaretçi yaptığınız veya son senin çalışma dizine teslim edildi işlemek son tamamlama. - Lütfen orada "işaretçi" kelimesinin kullanıldığına dikkat edin.
user3751385

"Son taahhüt anlık görüntüsü" açıklaması HEAD'in tipik olarak nasıl kullanılması gerektiğine dair kavramsal bir fikir verirken, bu gerçekten doğru değildir. Bir taahhütte bulunursam, başka bir şubeye geçersem, HEAD artık son taahhüt görüntüsünü göstermez. Geçiş yaptığım dalda son kaydedilen anlık görüntüye işaret ediyor. Eğer ben checkout HEAD^, şimdi HEAD herhangi bir daldaki son taahhüt görüntüsünü bile göstermiyor.
LarsH

"Bir sonraki taahhüdünüzün ebeveyni (eğer şimdi taahhütte bulunacaksanız)" daha doğrudur, ancak git'te HEAD'den etkilenen taahhüt dışında birçok işlem daha vardır. Gerçekten, sonunda, BAŞ BAŞ olduğunu ve benzeri komutları nasıl etkilediğini kendi doğası tarafından tanımlanır commit, merge, rebase, log"(işaretçi) mevcut konumu" vb Ama kavramsal olarak belki iyi bir özetidir.
LarsH

3

Öyle hissettiriyor HEAD , kontrol ettiğiniz son taahhüt için sadece bir etiket .

Bu, belirli bir dalın ucu ("ana" gibi) veya bir dalın aralarındaki bazı taahhütler ("ayrılmış kafa") olabilir.


1

Tüm tanımlara ek olarak, aklımda sıkışmış olan şey, bir taahhütte bulunduğunuzda, GIT'nin depo içinde bir taahhüt nesnesi oluşturmasıydı. Taahhüt nesnelerinin bir üst öğesi (veya bir birleştirme taahhüdü ise birden çok üst öğesi) olmalıdır. Peki, git mevcut taahhüdün ebeveynini nasıl biliyor? Bu yüzden HEAD, mevcut taahhüdün ebeveyni olacak son taahhüdün (referans) bir göstergesidir.


0

Bu ikisi sizi şaşırtabilir:

kafa

Yakın zamanda gönderilen bir şubeyi adlandırılmış referanslara işaret ediyor. Paket referansını kullanmadığınız sürece, kafalar genellikle $ GIT_DIR / refs / heads / içinde saklanır.

BAŞ

Mevcut dal veya çalışma ağacınız genellikle HEAD'ın işaret ettiği ağaçtan üretilir. Ayrı bir HEAD kullanmanız dışında HEAD bir kafaya bakmalıdır.


0

Bir göz atın http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is

Şekil 3-5. Bulunduğunuz şubeyi gösteren HEAD dosyası.


4
Bağlantı sadece cevaplar genellikle Stackoverflow üzerinde kaşlarını çattı, lütfen cevabınızdaki ilgili bilgileri satır içinde belirtin.
HaskellElephant

2
Bu tamamen doğru değil. Ne demek HEAD, çıplak veya çıplak olmayan bir repodan bahsettiğinize bağlıdır. Çıplak olmayan bir repo bağlamında, etkin bir şekilde şu anda teslim alınmış taahhüdü ifade eder, bu da kendisine bağlı bir şube olmasını gerektirmez (yani müstakil HEADdurumda).

0

Bir dal aslında gibi ID işlemek tutan bir işaretçidir 17a5 . BAŞ , kullanıcının şu anda üzerinde çalıştığı bir şubeye bir işarettir.

BAŞ , şuna benzeyen bir referans dosyasına sahiptir:

ref:

Bu dosyaları .git/HEAD .git/refs, içinde çalıştığınız depodaki dosyalara erişerek kontrol edebilirsiniz .


0

Gittamamen taahhütlerle ilgilidir.
Ve Headşu anda kontrol ettiğiniz taahhüdü işaret eder.

$ git cat-file -t HEAD
commit

Bir şubeyi her kontrol ettiğinizde, HEAD o daldaki en son taahhüdü işaret eder. HEAD içeriği aşağıdaki gibi kontrol edilebilir (ana dal için):

$ cat .git/refs/heads/master
  b089141cc8a7d89d606b2f7c15bfdc48640a8e25

-5

Kavram olarak, kafa bir daldaki en son revizyon. Her adlandırılmış dalda birden fazla başınız varsa, birleştirmeden yerel taahhütler verirken, adsız bir dal oluştururken büyük olasılıkla oluşturdunuz.

"Temiz" bir depoya sahip olmak için, adlandırılmış dal başına bir başınızın olması ve yerel olarak çalıştıktan sonra her zaman adlandırılmış bir dalla birleşmeniz gerekir.

Bu Mercurial için de geçerlidir .


4
Bu Mercurial için geçerlidir, ancak Git için geçerli değildir .
Monica'yı eski durumuna getirme - notmaynard
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.