Kurs
Bir uzak depodaki dal üzerinde, örneğin bir çalışma arkadaşınızın işi veya yeni bir özellik dalı üzerinde çalışmamız gerektiğinde, bu dala yerelden erişme ve güncelleme zorluğuyla karşılaşırız.
Neyse ki, Git bu süreci, uzaktaki dalın yerel bir kopyasını oluşturmayı kolaylaştıran basit komutlarla kolaylaştırır. Bu sayede istediğimiz dala geçebilir, katkıda bulunabilir ve ekiple etkili şekilde işbirliği yapabiliriz.
Hızlı bir yanıt için, adı <branch_name> olan bir dalı checkout etmek üzere şu komutları çalıştırırız:
git fetch origin <branch_name>
git checkout -b <branch_name> origin/<branch_name>
Bu yazıda bu komutları inceliyor ve nasıl çalıştıklarını daha ayrıntılı öğreniyoruz.
İki Aşamalı Süreç: git fetch ve git checkout
Uzak bir dal üzerinde yerelde çalışmaya başlamak için önce yerel depomuzun uzak depo ile güncel olduğundan emin olmamız gerekir. Ardından yerel bir kopya oluşturup o dal üzerinde çalışmaya başlayabiliriz.
Yerel depoyu güncelleme
Yerel depoyu güncellemek için git fetch komutunu kullanırız. En basit hâliyle hiçbir argüman kullanmaz:
git fetch
Argümansız kullanıldığında git fetch komutu, varsayılan uzak depodan tüm dalları getirir. Bu, istediğimiz dalı da kapsasa da daha fazla yerel disk alanı kaplayacaktır.
Disk alanı bir endişe ise, komuta parametre olarak vererek almak istediğimiz dalı belirtebiliriz:
git fetch origin <branch_name>
<branch_name> ifadesini istediğiniz dalın adıyla değiştirin. origin parametresi uzak deponun adını belirtir. Varsayılan olarak, bir depoyu klonladığımızda uzak ad olarak origin kullanılır.
Fetch ile uzak referansları güncellemenin yerel dosyaları etkilemeyeceğini veya çakışmalara neden olmayacağını unutmamak önemlidir. Yerelde iki ayrı varlık vardır:
- Geçerli çalışma dizini
- Yerel depo
Geçerli değişikliklerimiz ve commit'lerimiz geçerli çalışma dizininde bulunur. Bunlar, bilgisayarımızda depo dizinini açtığımızda gördüğümüz dosyalardır. Bunlar git fetch ile güncellenmez. Yalnızca yerel depo güncellenir; bu, yerel makinemizde uzak deponun gizli bir kopyası olarak düşünülebilir.
Uzak bir dalı checkout etme
Uzak deponun güncel bir kopyasıyla, şimdi git checkout komutunu kullanarak uzak dalın yerel bir kopyasını oluşturabiliriz:
git checkout -b <branch_name> origin/<branch_name>
<branch_name> ifadesini istenen uzak dalın adıyla değiştirin. -b sonrasındaki ilk parametre, yerel dalın sahip olmasını istediğimiz addır. Geleneksel olarak ikisi için de aynı adı kullanırız, ancak başka bir yerel dal bu adı taşımıyorsa farklı bir ad da kullanabiliriz:
git checkout -b <local_branch_name> origin/<branch_name>
Bu komut başarıyla çalıştırıldıktan sonra Git, geçerli çalışma dizinini bu dala geçirir ve üzerinde çalışmaya hazır oluruz.
git checkout ve git switch karşılaştırması
git checkout komutu, Git'in ortaya çıkışından beri vardır. Kapsamı, dalların yerel kopyalarını oluşturmaktan veya bir daldan diğerine geçmekten daha geniştir. Örneğin, uzak depodan belirli dosyaları alabilir.
Git'in yeni sürümlerinde, tek amacı uzak dalların yerel kopyalarını oluşturmak ve yerel dallar arasında geçiş yapmak olan git switch komutu oluşturuldu.
git checkout komutunun geniş yetenekleri bazen hatalara yol açabildiği için git checkout yerine git switch kullanmanızı öneririm.
Bu yazıda öğrendiğimiz işlemleri git switch kullanarak nasıl gerçekleştirebileceğinizi öğrenmek için şu eğitimi okuyabilirsiniz: Git Switch Branch: Uygulamalı Örneklerle Bir Rehber.
Sonuç
Uzak bir Git dalının yerel kopyasını oluşturmak, işbirliği için çok önemlidir. git fetch ve git checkout kullanarak yerel depomuzu uzak değişikliklerle güncelleyebilir ve istediğimiz dala geçebiliriz.
Klasik git checkout güçlü bir işlevsellik sunarken, daha yeni git switch komutu özellikle dal yönetimi için daha yalın bir alternatif sağlar ve hata riskini azaltır.
SSS
"please commit your changes or stash them before you switch branches." hatası alıyorum. Nasıl düzeltirim?
Geçerli dalda commit'lenmemiş değişiklikler varsa Git başka bir dala geçmemize izin vermez. Bu sorunu çözmek için mevcut değişikliklerimizi ya stash'lemeli ya da commit etmeliyiz.
Commit etmek için şu komutu kullanırız:
git commit -m "Commit message"
Alternatif olarak, değişiklikleri henüz commit etmeden korumak istiyorsak, işi geçici olarak kaydetmek için git stash komutunu kullanabiliriz:
git stash
Daha sonra, orijinal dala döndükten sonra git stash pop komutunu kullanarak bunları yeniden uygulayabiliriz.
Uzak dalın adı yerel bir dal ile aynıysa ne olur?
Git ile dal adlarının benzersiz olması gerekir. Dalın zaten var olduğunu söyleyen bir hata alırsak, aynı ada sahip yerel bir dal olduğu anlamına gelir. Bu iki anlama gelebilir:
- Bu dalı daha önce zaten checkout ettik. Bu durumda,
git checkout <branch_name>komutunu kullanarak fetch yapmadan doğrudan ona geçebiliriz. Yeni bir dal oluşturmak istediğimizi belirtmek için kullanılan-bparametresini çıkardığımıza dikkat edin. Dal zaten mevcut olduğundan, yeniden oluşturmamıza gerek yok. - Bir noktada, tesadüfen aynı ada sahip farklı bir dal oluşturmuş olabiliriz. Bunu,
git checkout -b <different_name> origin/<branch_name>ile farklı bir dal adı kullanarak çözebiliriz.
Doğrudan bir uzak dalda değişiklik yapabilir miyim?
Hayır, Git dalındaki değişiklikler, yukarıda öğrendiğimiz gibi önce bir dalın yerel kopyasını oluşturup ardından yapmak istediğimiz değişiklikleri temsil eden commit'ler oluşturarak gerçekleştirilir.
Yerel dalımı, uzaktaki en son değişikliklerle nasıl güncellerim?
Yerel dalımızı, karşılık gelen uzak dalın en son değişiklikleriyle güncellemek için genellikle git pull komutunu kullanırız:
git pull origin <branch_name>
Bu, yerel dalımızı güncellemek için hem git fetch hem de git merge işlemlerini gerçekleştirir. git fetch komutunun, yerel depoyu uzak deponun en son sürümüyle güncellediğini öğrendik. git merge komutu bu değişiklikleri yerel dalımıza birleştirir. Daha fazla ayrıntı için bu Git push ve pull eğitimine göz atın.
"remote branch not found." hatası alıyorum. Nasıl düzeltirim?
Bu hata, dalın depomuzun yerel kopyasında bulunmadığını gösterir. Dolayısıyla ya:
- Dal mevcut değildir; bu, dal adında yazım hatası olduğunu ya da dalın önceden silinmiş eski bir dal olduğunu gösterebilir.
- Yerel depo güncel değildir. Yukarıda öğrendiğimiz gibi,
git fetchkullanarak güncelleyebiliriz.

