HEAD, master, orijin git kavramları nelerdir?


197

Git'i öğrenirken, KAFA, usta, köken terimleriyle karşılaşmaya devam ediyorum ve farklılıkların ne olduğundan emin değilim. Doğru anlarsam, HEAD her zaman en son revizyona eşit mi? Ve eğer öyleyse, bu tüm deponun veya belirli bir dalın veya etiketin en son revizyonu mu? Bu çok kafa karıştırıcı. Bu konuda çok fazla ders okudum ve dallanma / birleştirme gibi şeyler, ama yine de kafamı etrafına satamıyorum.

Yanıtlar:


232

Scott Chacon tarafından "Pro Git" kitabını tavsiye ederim . Gerçek bir git repo'sunu keşfederken zaman ayırın ve gerçekten okuyun.

HEAD : Repo'nuzun geçerli olduğu taahhüt. Çoğu zaman HEADmevcut şubenizdeki en son taahhüdü işaret eder, ancak durum böyle olmak zorunda değildir. HEADgerçekten sadece "repo şu anda ne gösteriyor" anlamına gelir.

Taahhütün HEADatıfta bulunduğu herhangi bir dalın ucu değilse, buna "müstakil kafa" denir.

master : git'in ilk repo oluştururken sizin için oluşturduğu varsayılan dalın adı. Çoğu durumda, "ana", "ana dal" anlamına gelir. Çoğu dükkanda herkes ustalaşmak için zorlanır ve usta repo'nun kesin görünümü olarak kabul edilir. Ancak, serbest bırakma dallarının serbest bırakılmak için masterdan yapılması da yaygındır. Yerel deponuzun neredeyse her zaman uzak bir repo ustasını takip eden kendi ana dalı vardır.

origin : git'in ana uzak deponuza verdiği varsayılan ad. Kutunuzun kendi repo'su var ve büyük olasılıkla siz ve tüm iş arkadaşlarınızın zorladığı uzak bir repoya itiyorsunuz. Bu uzak repo neredeyse her zaman orijin olarak adlandırılır, ancak olması gerekmez.

HEADgit'te resmi bir kavramdır. HEADher zaman iyi tanımlanmış bir anlamı vardır. masterve origingenellikle git'te kullanılan yaygın isimlerdir, ancak olmak zorunda değildir.


"HEAD gerçekten sadece" repo şu anda neyi işaret ediyor "anlamına geliyor. Bir depoda birden fazla şube varsa, hangisi size göre KAFA? 3 şube varsa (master ile birlikte) ve şube A'da bir ihtiyaç taahhüdü yapılmışsa, HEAD hala 'master'ın taahhüdünde olabilir. Peki, deponun şimdi işaret ettiği revizyon hangisidir?
OK999

2
Repo ile ne demek istediğinizi net değil (yerel veya uzak). Genel olarak cevabınız ifadeleri daha önce açıklamadan kullanır.

Çalışma dizinimi uzaktan repo ucuyla karşılaştırmak için paralel bir dizinde bir klon yaptım. Tüm git cevapları bu kadar iyi.

@JingHe Tüm kitabı okudun mu? Gerçekten buna değer mi? Demek istediğim, okuduğum 500+ sayfadan korkutucu bir şekilde bahsediyoruz, bu benim için biraz fazla görünüyor ...
Max

1
Mantığı anladığımı doğrulamak için, uzaktaki bir dalı featureA olarak çağırabilirim ve bu dala bastığımda "git push origin featureA" yazarım. Aynı şeyi "git pull origin featureA" diyerek uzaktan da çekebilirim, değişiklik yapabilirim. Ve kafa sadece yerel kopyaya atıfta bulunuyor. @ OK999 İnanıyorum ki HEAD şu anda hangi şubede bulunduğunuza işaret ediyor. Taahhüt A şubesinde yapılmışsa, ancak şu anda B şubesinde bulunuyorsanız, HEAD B şubesini işaret etmektedir. Belirli bir taahhütte bulunmadan önce HEAD'i branchA'ya geri götürmelisiniz.
19'da 6

43

HEADen son revizyon değil, mevcut revizyon. Genellikle, mevcut dalın en son revizyonudur, ancak olmak zorunda değildir.

master ana şubeye yaygın olarak verilen bir addır, ancak başka bir şey olarak adlandırılabilir (veya ana dal olamaz).

originana uzaktan kumandaya yaygın olarak verilen bir addır. remote, çekebileceğiniz ve itebileceğiniz başka bir havuzdur. Genellikle github gibi bazı sunucularda.


1
HEAD'in ne zaman güncel olduğunu, ancak en son ne zaman olmadığını örnek verebilir misiniz? Bunu daha önce hiç görmedim. Yoksa, dalınız izlediği uzak dalın arkasında olduğu için en yeni olmayabilir mi?
Matt Greer

12
@MattGreer: Daha eski bir şeye (örneğin bir etiket gibi git checkout v1.1) bakarsanız, HEAD'ınız bu etiketin taahhüdüne geçer. En son taahhüt olmayabilir.
Greg Hewgill

8

Bu doğrudan soruyu cevaplamasa da, ProGit adlı temel bilgileri öğrenmenize yardımcı olacak harika bir kitap var . Ölü odun versiyonunu bir bit koleksiyonuna tercih ederseniz, Amazon'dan satın alabilirsiniz .


9
Soru bir kitap istemedi! Benim için hala net değil, neden git için bir kitaba ihtiyacım var, C ++ için birine ihtiyacım olmadığında.

13
Sadece C ++ için bir kitaba ihtiyacınız olmadığını düşünürsünüz;)
Piotr Perak
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.