Tamam, önce birkaç terim biraz daha basitleştirildi.
İçinde git
, tag
(diğer birçok şey gibi) ağaçsu olarak adlandırılan şeydir . Bu, proje tarihinde bir noktaya değinmenin bir yoludur. Treeishes bir etiket, bir taahhüt, bir tarih belirleyici, bir sıralı belirteç veya daha birçok şey olabilir.
Şimdi a branch
tıpkı bir etiket gibidir ama hareketlidir. Bir dalda "bulunduğunuzda" ve bir taahhütte bulunduğunuzda, şube, mevcut pozisyonunu belirten yeni taahhüdüne taşınır.
Sizin HEAD
"geçerli" olarak kabul edilen bir dalın göstergesidir. Genellikle bir havuzu klonladığınızda, HEAD
bunun master
karşılığında bir taahhüdü işaret edeceğini gösterir. Daha sonra böyle bir şey git checkout experimental
yaptığınızda, farklı bir işleme işaret edebilecek şubeye HEAD
işaret edersiniz experimental
.
Şimdi açıklama.
Bir yaptığınızda, a ile git checkout v2.0
işaret edilmeyen bir taahhüde geçersiniz branch
. HEAD
Şimdi "müstakil" ve bir dal işaret etmiyor. Şimdi bir taahhütte bulunmaya karar verirseniz (olabildiğince), bu taahhüdü izlemek için güncellenecek bir şube işaretçisi yoktur. Başka bir taahhüde geri dönmek, yaptığınız bu yeni taahhüdü kaybetmenize neden olur. Mesaj size bunu söylüyor.
Genellikle, yapabileceğiniz şey söylemek git checkout -b v2.0-fixes v2.0
. Bu, treeish'in v2.0
(bu durumda bir etiket) işaret ettiği taahhütte yeni bir şube işaretçisi oluşturacak ve ardından bu HEAD
noktanıza gelecektir. Şimdi, taahhüt yaparsanız, onları ( v2.0-fixes
şubeyi kullanarak ) izlemek mümkün olacak ve genellikle yaptığınız gibi çalışabilirsiniz. Özellikle v2.0
koda bir göz atmak istiyorsanız, yaptığınız işte "yanlış" bir şey yoktur . Bununla birlikte, orada izlemek istediğiniz herhangi bir değişiklik yapmak istiyorsanız, bir şubeye ihtiyacınız olacak.
Git'in tüm DAG modelini anlamak için biraz zaman harcamalısınız. Şaşırtıcı derecede basit ve tüm komutları oldukça net hale getiriyor.