Git kontrolleri gerçekten ne anlama geliyor?


96

checkoutGit'te neler var ?

Yapmanız kez bildiğim checkoutbelirli bir dalına, HEADo alanın noktalarını. Ama gerçekten ne anlama geliyor? Bu o dalda çalışabileceğim anlamına mı geliyor? Cevabınız evet ise, o zaman bir şubeyi kontrol etmeden üzerinde çalışamayacak mıyım?

Ayrıca ne anlama remote checkoutgeliyor? Nasıl faydalıdır?


1
Hiçbiri alınmadı. Evet var ve bunun ne anlama geldiğine dair bir teori ile karşılaştım. yani HEAD'i işaret edin, vb. Ama ben "ödeme kodu - değişiklik yapın - kontrol edin" bakış açısından bilmek istiyorum veya bu farklı mı?
daehaai

25
@antonijn - soruyu googling yapmayı denedim - bu ilk sonuç - buraya geldiğimde sorunun kapandığını ve herkesin sahip olduğu bu çılgın tavrın ne kadar üzücü olduğunu gördüm - TFS geçmişinden geliyorum ve ben "Ödeme" nin GIT'de tamamen farklı bir anlama geldiğinden şüphelenmeye başlıyorum. Git-land'ın ne anlama geldiğini bilmek istiyorum .
BrainSlugs83

Yanıtlar:


60

Sizin de belirttiğiniz gibi, HEADcommit ağacında nerede olduğunuzu belirten bir etiket. Bir işlemden diğerine geçtiğinizde sizinle birlikte hareket eder. git checkout <commit>commit ağacında hareket etmek, odağınızı ( HEAD) belirtilen commit'e taşımak için temel mekanizmadır .

, Karma, şube adı, etiket adı, bağıl sözdizimi (işlemek çeşitli yollarla herhangi biri tarafından belirlenebilir işlemek HEAD^, HEAD~1böylece, vb) ve. Bir ödünç verme işleminin şubeleri değiştirdiğini düşünmek genellikle yararlıdır ve bu bakış açısına göre çalışan bazı seçenekler vardır, ancak hepsi taahhütlere atıfta bulunur.

Bir işlemi teslim almak, hareket etmekten başka bazı yan etkilere sahiptir HEAD.

  • Çalışma dizini, teslim alınan tamamlamanın durumuna güncellenir.
  • bir şube adı belirtilirse, kullanıma alma işlemi o dalı etkinleştirir. Aktif dal, eklenen yeni işlemlerle birlikte hareket edecektir.
    • ile -bseçeneğiyle yeni bir şube akımı işlemek alınarak oluşturulan ve daha sonra aktif hale getirilecektir.
    • ile --trackseçeneğiyle teslim şube uzak şube farkında yapılabilir
    • ile --orphanseçeneğiyle yeni bir şube (olduğu gibi oluşturulur -b) ancak herhangi taahhüt mevcut dayalı edilmeyecektir.

Git checkout man-sayfasında okuyabileceğiniz birkaç seçenek daha var, bunların tümü bir commitden diğerine geçme etrafında dönüyor - sadece hareketin hareket etmesine ek olarak ne gibi bir etkiye sahip olduğuna göre değişir HEAD.


Dolayısıyla, kulağa "ödeme" tamamen farklı bir anlama geliyor gibi geliyor (yine de TFS ile karşılaştırıldığında - TFS eşdeğeri belirli bir "değişiklik kümesi" "almak" olacaktır). Buna baktığıma sevindim! - "en son" için herhangi bir sihirli sabit var mı? (TFS'de "T" dir) - bu şekilde kodun en son sürümünü "HEAD" etiketini bilmeden indirebilir miyiz?
BrainSlugs83

1
Bir şubedeyseniz, şube adı o şubenin en son taahhüdüdür - eğer bir şubede değilseniz, en son kaydetmişsinizdir. Depodaki en son yürütmeyi dallanmaya bakmaksızın bulmak için log komutunu kullanırdım ve sonra el ile ona geçerdim - ancak gerekirse otomatikleştirilebileceğinden eminim.
David Culp

Son paragraf hakkında: lütfen bunun git checkout <commit> <path>şubeleri değiştirmediğini unutmayın .
galath

Açıklamanız yanlış değil ama çok önemli (ve potansiyel olarak tehlikeli) kullanım örneğini unuttu: git checkout <path>.
Eric Duminil

24

Dosya, klasör ve dallarla bazı kullanıma alma durumlarını açıklamama izin verin, böylece anlaşılmaya yardımcı olabilir.

Diyelim ki adlandırılmış bir klasörümüz var devve index.htmlayrıca Her şey izleniyor ve çalışma dizini temiz.

Yanlışlıkla dosya adını değiştirirsem index.htmlve bunu geri almak istersem, git checkout index.htmlbu dosya durumunu depodan seçili daldan kurtarır.

Şimdi devklasörde bir değişiklik yaptıysam ve onu kurtarmak istersem. Kullanabilirim git checkout devama ya devbu klasörü kontrol etmek yerine zaten adlandırılmış bir dal varsa, o dalı aşağı çekecektir. Bundan kaçınmak için yapmayı tercih ederim git checkout -- dev.

Şimdi burada çıplak çift çizgi, geçerli dal anlamına gelir ve git, devseçili daldaki klasör için sorulur .

Benzer şekilde yaparsam git checkout alpha devdev klasörünü alfa dalından aşağı çeker.

Bu cevap, ilk sorunuz için 'git checkout gerçekten anlamlıdır'.


2
Son satırınızda Bu yanıt, ilk sorunuz için 'git checkout gerçekten anlamlıdır'. Eğer 'demek' daldan klasör 'gerçekten' kontrol şunlardır: P
Paramvir Singh Karwal

22

"Teslim almak için" arşivden herhangi bir verilmiş commit almanız ve ilişkili dosyanın durumunu ve çalışma dizininde dizin ağacını yeniden yaratmanız anlamına gelir.

Dal başı olmayan bir işlemeyi kontrol ettiğinizde (örneğin git checkout HEAD~2), sözde bağımsız bir başsınızdır. Burada kaydetme oluşturabilirsiniz, ancak farklı bir şubeye geçtiğinizde, bu taahhütler bir şube adıyla kurtarılamaz ve hatta bir süre sonra çöp toplayıcı tarafından kaldırılabilir.

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.