Program
Git, modern geliştiricinin araç setinde güçlü sürüm kontrol yetenekleriyle öne çıkan vazgeçilmez bir araçtır. 2005 yılında Linus Torvalds tarafından Linux çekirdeğinin geliştirilmesini desteklemek için oluşturulan Git, o zamandan beri dünya genelindeki sayısız yazılım projesinin omurgası haline geldi. Proje sürümlerini yönetmedeki verimliliği ve esnekliği, iş birliğine sunduğu güçlü destekle birleştiğinde, her ölçekteki ekipler için vazgeçilmez kılar.
Bu makale, başlangıçtan ileri seviyeye kadar uzanan en iyi 20 Git mülakat sorusunu ele alarak teknik mülakatlara hazırlanmanıza yardımcı olmayı amaçlıyor. İster Git’e yeni başlıyor olun ister bilginizi derinleştirmek isteyin, bu soru ve cevaplar uzmanlığınızı göstermenize ve mülakatınızda başarılı olmanıza yardımcı olacaktır.
Temel Git Mülakat Soruları
Git’e görece yeniyseniz, temel mülakat sorularının bir kısmı başlangıç kavramları ve kullanımlarıyla ilgili olacaktır. Bunları tazelemeniz gerekirse, DataCamp’in Introduction to Git kursuna göz atmayı unutmayın.
1. Git deposu (repository) nedir?
Bir Git deposu, bir projenin dosyalarını ve revizyon geçmişini saklar ve zaman içinde yapılan değişiklikleri izleyerek sürüm kontrolünü kolaylaştırır. Cihazınızdaki bir klasörde yerel olarak veya GitHub gibi çevrimiçi bir platformda bulunabilir. Bu, kullanıcıların iş birliği yapmasına, önceki sürümlere dönmesine ve commit, push, pull gibi komutları kullanarak proje geliştirmeyi verimli şekilde yönetmesine olanak tanır.
2. Git nasıl çalışır?
Git, bir projedeki dosya ve dizinlerde yapılan değişiklikleri kaydederek, değişen durumunun anlık görüntülerini (snapshot) alarak çalışır. Kullanıcılar değişiklikleri takip edebilir, eşzamanlı geliştirme için dallar (branch) oluşturabilir, dalları birleştirebilir ve gerekirse önceki durumlara dönebilir. Ayrıca iş birliğini teşvik eder ve yazılım geliştirme çalışmalarında etkili sürüm kontrolü sağlar.
3. git add nedir?
git add komutu, bir sonraki commit’e dahil edilmek üzere değişiklikleri sahnelemek (stage etmek) için kullanılır. Çalışma dizinindeki dosyalara yapılan değişiklikleri, eklemeleri veya silmeleri hazırlayarak, yaklaşan commit anlık görüntüsüne dahil edilecek şekilde işaretler. Unutmayın, bu komut değişiklikleri gerçekten commit etmez; yalnızca sahnelemeye hazırlar.
4. git push nedir?
git push komutu, yerel depo içeriğini uzak bir depoya yüklemek için kullanılır. Yerel depodaki commit’lenmiş değişiklikleri, genellikle GitHub veya GitLab gibi bir sunucudaki uzak depoya aktarır. Bu komut, kullanıcıların aynı projedeki diğerleriyle değişikliklerini paylaşmasına olanak tanıyarak iş birliğini mümkün kılar.
Ayrı eğitimimizde Git push ve pull hakkında daha fazla bilgi edinebilirsiniz.
5. git status nedir?
git status komutu, Git’te deponun mevcut durumunu gösterir. Hangi dosyaların değiştirildiğini, hangilerinin bir sonraki commit için sahnelendiğini ve hangilerinin izlenmediğini (untracked) bildirir. Kullanıcıların çalışmalarının ilerlemesini takip etmesine ve commit edilmesi ya da sahnelenmesi gereken değişiklikleri belirlemesine yardımcı olur.
6. Git’te commit nedir?
Commit, belirli bir anda depodaki dosyalara yapılan değişikliklerin bir anlık görüntüsünü temsil eder. Git’te değişiklikleri commit ettiğinizde, dosyalarınızın mevcut hâlini fiilen kaydedersiniz ve yapılan değişiklikleri açıklayan (ve önerilen) açıklayıcı bir mesaj ekleyebilirsiniz.
Her commit benzersiz bir tanımlayıcı oluşturur ve bu sayede depodaki değişiklik geçmişini takip etmenizi sağlar. Commit’ler, projenin önceki durumlarına dönmenin, değişiklik geçmişini gözden geçirmenin ve güncellemeleri paylaşarak başkalarıyla iş birliği yapmanın yolunu sundukları için sürüm kontrolde kritik bir rol oynar.

Mülakat hazırlığınız için DataCamp’in Git Kısa Kılavuzu’na göz atın
7. Git’te dallanma (branching) nedir?
Dallanma, ana geliştirme hattından (genellikle "master" olarak adlandırılır) ayrılarak yeni özellikler, düzeltmeler veya denemeler üzerinde ana kod tabanını etkilemeden çalışmayı ifade eder. Aynı depo içinde birden fazla paralel geliştirme hattının bir arada bulunmasına olanak tanır.
Her dal, kendine ait commit dizisine sahip ayrı bir geliştirme hattını temsil eder; bu da geliştiricilerin farklı özellikler veya düzeltmeler üzerinde eşzamanlı çalışmasını sağlar. Dallanma, projede iş birliğini, deneyselliği ve düzeni kolaylaştırır; çünkü bir dalda yapılan değişiklikler tamamlanıp test edildikten sonra ana kod tabanına geri birleştirilebilir.
8. Git’te çatışma (conflict) nedir?
Çatışmalar, genellikle birleştirme (merge) veya yeniden tabanlama (rebase) sırasında, farklı katkıda bulunanların bir dosyanın aynı bölümünde çelişen değişiklikler yapmasıyla ortaya çıkar. Git bu çelişen değişiklikleri otomatik olarak çözemediğinde, tutarsızlıkları gidermek için kullanıcının manuel müdahalesi gerekir.
Bu nedenle, çatışmaları çözmek için, çatışmalı dosyalar gözden geçirilmeli ve en uygun uzlaştırmaya göre düzenlenmeli, ardından çözülen sürüm commit edilmelidir.
9. Git’te birleştirme (merge) nedir?
Birleştirme, Git’te projedeki farklı dallar arasında iş birliğini ve değişikliklerin entegrasyonunu kolaylaştıran temel bir işlemdir. Birleştirme, farklı dallardaki değişikliklerin tek bir dalda, genellikle ana dalda (ör. master veya main) bir araya getirilmesi sürecidir.
Birleştirme, bir dalda yapılan değişiklikleri diğerine entegre eder ve her iki dalın geçmişini birleştiren yeni bir commit ile sonuçlanır. Git’te birleştirme çatışmalarını nasıl çözebileceğiniz hakkında daha fazlasını ayrı eğitimimizde öğrenebilirsiniz.
Orta Seviye Git Mülakat Soruları
10. Git’te uzak depo (remote) nedir?
Uzak depo, iş birliği ve başkalarıyla kod paylaşımı için bir sunucuda veya başka bir bilgisayarda barındırılan depodur. Geliştiricilerin yerel değişikliklerini push edebileceği ve başkalarının yaptığı değişiklikleri pull edebileceği merkezi bir konum görevi görür.
Uzak depolar genellikle GitHub, GitLab veya Bitbucket gibi barındırma platformlarında kurulur ve birden çok katkıda bulunan arasında proje kodunu saklamak ve senkronize etmek için ortak bir konum sağlayarak dağıtık geliştirmeyi ve ekip çalışmasını kolaylaştırır.
11. git fetch ve git pull arasındaki fark nedir?
git fetch ve git pull arasındaki temel fark, ne yaptıkları ve yerel depoyu nasıl güncelledikleridir.
git fetch komutu, uzak bir depodan değişiklikleri yerel depoya getirir. Yerel depodaki uzak izleme dallarını (ör. origin/master) uzak deponun durumunu yansıtacak şekilde günceller, ancak çalışma dizinini güncellemez veya mevcut dala herhangi bir değişikliği birleştirmez. Bu, fetch işleminden sonra uzak depoda yapılan değişiklikleri yerel çalışmalarınızı etkilemeden inceleyebileceğiniz anlamına gelir.
git pull komutu da uzak bir depodan değişiklikleri getirir, ancak bir adım daha ileri giderek değişiklikleri fetch eder ve tek adımda mevcut dala birleştirir. Esasen, uzak depodaki değişiklikleri mevcut dala dahil etmek için git fetch’in ardından bir git merge gerçekleştirir.
12. Zaten push edilmiş ve herkese açık bir commit nasıl geri alınır?
git revert <commit-hash> komutu, zaten push edilmiş ve herkese açık bir commit’i geri almak için kullanılabilir.
Adım adım süreç şöyledir:
1. Geri almak istediğiniz commit’i, commit hash’ini bularak belirleyin. Bunu, commit geçmişini görüntülemek ve geri almak istediğiniz commit hash’ini bulmak için git log komutunu kullanarak yapabilirsiniz.
2. Commit hash’ini aldıktan sonra, belirtilen commit’in getirdiği değişiklikleri geri alan yeni bir commit oluşturmak için commit hash’inin ardından git revert komutunu kullanın. Örneğin:
git revert <commit-hash>
3. Git, geri alma için bir commit mesajı oluşturmak üzere bir metin düzenleyici açar. Gerekirse mesajı düzenleyebilir, ardından düzenleyiciyi kaydedip kapatabilirsiniz.
4. Commit mesajını kaydettikten sonra Git, belirtilen commit’in getirdiği değişiklikleri fiilen geri alan yeni bir commit oluşturur. Bu yeni commit geçmişe eklenir ve böylece orijinal commit’in yaptığı değişiklikler geri alınmış olur.
5. Son olarak, geri almayı herkese açık hâle getirmek için yeni commit’i aşağıdaki komutla uzak depoya push edin:
git push origin <branch-name>
git revert kullanmak, orijinal commit’in getirdiği değişiklikleri geri alan yeni bir commit oluşturur; böylece commit geçmişini değiştirmeden geri alma işlemi yapılır. Bu yaklaşım, commit geçmişini değiştirebilen ve değişiklikleri çoktan pull etmiş iş arkadaşlarınız için sorunlara yol açabilecek git reset veya git amend’den daha güvenlidir.
13. git reset ne yapar?
git reset komutu, mevcut HEAD’i belirtilen bir duruma sıfırlar. Bu, değişiklikleri geri almak, dosyaları sahneden çıkarmak veya HEAD işaretçisini farklı bir commit’e taşımak için kullanılabileceği anlamına gelir. Not: git reset’in üç ana modu vardır:
--soft: HEAD işaretçisini belirli bir commit’e taşır, değişiklikleri sahnede tutar. Dosyalar çalışma dizininde değiştirilmiş olarak kalır ve yeniden commit edebilirsiniz.
--mixed: HEAD işaretçisini belirli bir commit’e taşır, değişiklikleri sahneden çıkarır. Dosyalar çalışma dizininde değiştirilmiş olarak kalır, ancak değişiklikler commit için sahnelenmiş değildir.
--hard: HEAD işaretçisini belirli bir commit’e taşır, çalışma dizinindeki ve sahneleme alanındaki tüm değişiklikleri siler. Dikkatle kullanın; commit edilmemiş değişiklikleri kalıcı olarak siler.
14. git stash nedir?
git stash, çalışma dizininde henüz commit etmeye hazır olmayan değişiklikleri geçici olarak saklayan bir Git komutudur. Geliştiricilerin değişikliklerini depoya commit etmeden kaydetmesine olanak tanır.
Dallar arasında geçiş yaparken, değişikliklerinizi commit etmek ya da kaybetmek istemediğiniz durumlarda kullanışlıdır. Daha sonra saklanan değişiklikleri çalışma dizininize uygulayabilir veya stash yığınından çıkarıp üzerinde çalışmaya devam edebilirsiniz.
15. git reflog nedir?
git reflog, HEAD işaretçisindeki değişiklikleri ve depoda checkout yapılan commit’lerin geçmişini kaydeden başvuru günlüklerini görüntülemek için kullanılan bir Git komutudur. Depoda gerçekleştirilen son eylemlerin (commit’ler, checkout’lar, merge’ler ve reset’ler dahil) kronolojik bir listesini sunar.
Reflog, kaybolan commit’leri veya dalları kurtarmak ve depoda gerçekleştirilen eylemlerin sırasını anlamak için faydalıdır.
16. Mevcut bir Git dalını uzak bir dalı izleyecek şekilde nasıl ayarlarsınız?
Mevcut bir Git dalını uzak bir dalı izleyecek şekilde ayarlamak için, --set-upstream-to veya -u seçeneğiyle birlikte git branch komutunu, ardından uzak dalın adını kullanabilirsiniz.
Sözdizimi aşağıdaki gibi olacaktır:
git branch --set-upstream-to=<remote-name>/<branch-name>
veya
git branch -u <remote-name>/<branch-name>
İleri Seviye Git Mülakat Soruları
17. Git’te farklı projeler için birden çok yapılandırmayı nasıl yönetirsiniz?
Çeşitli yapılandırmaları ele almak için, farklı seviyelerdeki ayarları düzenlemek üzere --global, --system veya --local bayraklarıyla birlikte git config komutunu kullanın. Alternatif olarak, deponun yoluna bağlı olarak belirli ayarları dahil etmek için Git yapılandırmasında includeIf kullanın.
18. Git ile büyük dosyaları nasıl yönetirsiniz?
Git’te büyük dosyaları yönetmek, depo boyutu ve performansa etkileri nedeniyle zorlu olabilir. Büyük dosyaları Git deposunun dışında saklamak, depoda ise onlara hafif işaretçiler tutmak için Git LFS kullanın. Bu, deponun boyutunu azaltır ve performansı iyileştirir. Git LFS, çeşitli depolama sağlayıcılarını destekler ve Git iş akışlarıyla sorunsuz entegre olur.
19. git submodule ne için kullanılır ve bir alt modül nasıl güncellenir?
git submodule komutu, bir Git deposu içindeki harici bağımlılıkları yönetir. Ana deponuz içinde harici depoları alt modül olarak dahil etmenize olanak tanır. Bu, ana proje kod tabanınızdan ayrı tutarken harici kaynaklardan kodu projeye dahil etmek istediğinizde kullanışlıdır.
Git’te bir alt modülü güncellemek için şu adımları izleyebilirsiniz:
- Ana deponuz içinde alt modülün dizinine gidin.
- Alt modülün uzak deposundan en son değişiklikleri almak için
git fetchkullanın. - Alt modülün izlediği daldaki en son commit’e güncellemek istiyorsanız
git pullkullanın. - Alternatif olarak, belirli bir commit’e veya dala güncellemek isterseniz,
git checkout’u ilgili commit hash’i veya dal adıyla kullanın. - Alt modülü istenen duruma güncelledikten sonra, güncellenen alt modül durumunu yansıtmak için ana depoda bu değişiklikleri commit etmeniz gerekir.
20. git push --force yerine git push --force-with-lease kullanmanın önemi nedir?
git push --force-with-lease, uzak bir depoya değişiklikleri zorla göndermenin git push --force’a göre daha temkinli bir yoludur; çünkü uzak depoda başkalarının yaptığı değişiklikleri yanlışlıkla üzerine yazmayı engeller.
git push --force kullandığınızda, son fetch işleminden bu yana başkaları depoyu güncellemiş olsa bile değişikliklerinizi uzak depoya zorla gönderirsiniz. Bu da diğer geliştiricilerin çalışmalarının istemeden kaybolmasına yol açabilir.
Buna karşılık, git push --force-with-lease daha güvenli bir alternatiftir. Gönderdiğiniz uzak dalın, son fetch’ten bu yana başkaları tarafından güncellenip güncellenmediğini kontrol eder. Uzak dal güncellendiyse, push reddedilir ve böylece başkalarının değişikliklerini istemeden üzerine yazmanız engellenir.
Teknik Mülakata Hazırlık
Mülakatlarda Git bilginizi ve deneyiminizi sergilemek, sürüm kontrolündeki yetkinliğinizi ve yazılım geliştirme ekiplerindeki iş birliği becerilerinizi ortaya koymak açısından çok önemlidir.
Git becerilerinizi etkili şekilde aktarmak için teknik mülakatınıza hazırlanırken takip etmeniz gereken bazı ipuçlarına bakalım:
Git’in temellerini anlayın
Depolar, dallanma, birleştirme, commit’ler ve pull, push, clone, commit gibi temel komutlar dahil olmak üzere Git’in temellerini sağlam biçimde anladığınızdan emin olun. Bu temel bilgi, mülakat sırasında yapacağınız konuşmanın temelini oluşturacaktır. Ayrıca sürüm kontrolü gibi temel ilkeleri, Git ile alternatif sürüm kontrol sistemleri (VCS) arasındaki farkları ve bunların yazılım geliştirmedeki önemini iyice kavramanız faydalı olur.
Son olarak, Git Flow, GitHub Flow ve GitLab Flow gibi çeşitli Git metodolojilerine aşina olun. Her yaklaşımın avantaj ve dezavantajlarını değerlendirin ve hangi durumlarda en yararlı olduklarını belirleyin.
DataCamp’in Git’e dair kapsamlı rehberi, temellere aşinalık kazanmak için iyi bir başlangıç noktasıdır.
Uygulamalı deneyim edinin
Git’i ne kadar çok kullanırsanız, bilginizi o kadar pekiştirirsiniz. Düzenli pratik, çeşitli komut ve prosedürlere aşinalığınızı artırır. Daha fazla deneyim kazanmak için Git’i günlük iş akışınıza dahil etmeye çalışın. Dallar oluşturmayı, bunları birleştirmeyi ve çatışmaları çözmeyi mutlaka deneyin.
Git ile uygulamalı deneyim kazanmak için hangi projeler üzerinde çalışacağınızdan emin değilseniz, GitHub gibi platformlar üzerinden açık kaynak projelerine katılmak, sektör standartı iş birliği araç ve iş akışlarına ilk elden maruz kalmanın harika bir yoludur.
Yaygın sorunları ve nasıl çözüleceklerini öğrenin
Git kullanırken sorunlarla karşılaşmanız kaçınılmazdır. Yaygın sorunlar arasında birleştirme çatışmaları, detached HEAD durumları, değişiklikleri geri alma ve kaybolan commit’leri kurtarma bulunur. Git sorunlarını teşhis etmek, sorun giderme becerilerini geliştirir ve Git’in temel mekanizmalarını daha derinlemesine anlamayı sağlar.
Etkin bir şekilde sorun giderip hata mesajlarını analiz ederek, Git’in iç işleyişine dair içgörüler kazanır ve sorunları verimli şekilde tespit edip çözme yetkinliği geliştirirsiniz. Bu proaktif yaklaşım, potansiyel riskleri azaltır ve sürüm kontrol iş akışlarını yönetmede güven ve uzmanlık inşa eder.
Deneme mülakatları yapın
Deneme mülakatlarına katılarak adaylar, Git bilgileri ve iletişim becerilerindeki zayıf alanları belirleyebilir ve hazırlık çalışmalarına etkin şekilde odaklanabilir.
Ayrıca deneme mülakatları, adaylara gerçekçi Git senaryoları ve kodlama alıştırmalarını ele alarak problem çözme becerilerini geliştirme fırsatı sunar. Bu uygulamalı pratik, adayların Git konusundaki özgüvenini artırır ve mülakat sırasında düşüncelerini net bir şekilde ifade etme yetilerini güçlendirir.
Sonuç
Git, kod değişikliklerini yönetmek, başkalarıyla iş birliği yapmak ve proje geçmişini korumak için yazılım geliştirmede yaygın olarak kullanılan güçlü bir sürüm kontrol sistemidir. Git’e aşinalık, teknik mülakatlar için gereklidir; çünkü temel geliştirici araç ve iş akışlarında yetkinliği gösterir, iş birliği becerilerini sergiler ve ekip ortamlarında kodu etkin biçimde yönetme yeteneğini vurgular.
Ayrıca Git kavram ve komutlarını anlamak, kod bütünlüğünü, proje sürekliliğini ve yalın geliştirme süreçlerini güvence altına alan verimli sürüm kontrol uygulamalarını mümkün kılar. Bu nedenle Git bilgisi, teknik mülakatlarda yol alan ve başarılı kariyerler hedefleyen yazılım mühendisleri ve geliştiriciler için paha biçilmezdir.
Daha fazla öğrenim için aşağıdaki kaynaklara göz atın:

