Git Nedir? Git Kullanımı, Temel Komutlar ve GitHub Rehberi

E-posta Hosting Kampanya

Bir yazılım projesi üzerinde çalışırken yapılan değişiklikleri takip etmek, eski bir sürüme geri dönmek veya birden fazla geliştiricinin aynı kod üzerinde güvenli biçimde çalışmasını sağlamak zamanla zorlaşabilir. Dosyaları farklı isimlerle kaydetmek ya da her önemli değişiklikten önce projenin bir kopyasını oluşturmak başlangıçta işe yarasa da proje büyüdükçe yönetilmesi güç bir alışkanlığa dönüşür. Git, tam da bu noktada devreye girer.

Git, dosyalardaki değişiklikleri kaydetmeye, geçmiş sürümleri incelemeye ve farklı geliştirme çalışmalarını bir arada yönetmeye yarayan dağıtık bir sürüm kontrol sistemidir. Özellikle yazılım geliştirmede yaygın olarak kullanılır. Bununla birlikte Git, yalnızca programlama kodları için tasarlanmamıştır. Metin belgeleri, yapılandırma dosyaları ve sürümleri takip edilmesi gereken başka metin tabanlı projeler de Git ile yönetilebilir.

Bu rehberde Git’in ne olduğunu, GitHub ile arasındaki farkları, bilgisayara nasıl kurulacağını ve en önemli Git komutlarının nasıl kullanılacağını öğreneceksiniz. Ayrıca branch yönetimi, uzak depolarla çalışma, birleştirme çakışmaları ve sık yapılan hatalar gibi günlük geliştirme sürecinde karşılaşabileceğiniz konulara da değineceğiz.

Git Nedir ve Neden Kullanılır?

Git, bir projenin zaman içinde nasıl değiştiğini kaydeden ve bu değişikliklerin geçmişine erişmenizi sağlayan bir sürüm kontrol sistemidir. Projeye yeni bir özellik eklediğinizde, bir hatayı düzelttiğinizde veya bir dosyanın içeriğini değiştirdiğinizde bu işlemleri Git üzerinden takip edebilirsiniz.

Örneğin, çalışan bir web sitesine yeni bir ödeme yöntemi eklediğinizi düşünün. Güncelleme sonrasında başka bir bölüm çalışmamaya başlarsa hangi dosyaların değiştiğini inceleyebilir, önceki sürümlerle karşılaştırma yapabilir ve hatanın kaynağını araştırabilirsiniz. Uygun koşullarda önceki bir sürüme dönmek de mümkündür.

Git’in temel faydaları şunlardır:

  • Değişiklik geçmişi: Projede hangi değişikliklerin yapıldığını ve bunların hangi commit kayıtlarında yer aldığını inceleyebilirsiniz.
  • Geri dönüş imkânı: Önceki sürümlerdeki dosya içeriklerine ulaşabilir, hatalı değişiklikleri kontrollü biçimde geri alabilirsiniz.
  • Paralel geliştirme: Yeni özellikleri ana geliştirme çizgisinden ayrı bir branch üzerinde geliştirebilirsiniz.
  • Ekip çalışması: Birden fazla geliştirici, değişikliklerini ortak bir depo üzerinden paylaşabilir.
  • Karşılaştırma: İki sürüm arasında hangi satırların eklendiğini, silindiğini veya değiştirildiğini görebilirsiniz.
  • İzlenebilirlik: Yapılan değişiklikleri açıklayan commit mesajları sayesinde projenin gelişim sürecini daha kolay anlayabilirsiniz.

Git kullanmak için büyük bir yazılım ekibinde çalışmanız gerekmez. Tek başınıza geliştirdiğiniz küçük bir uygulamada bile sürüm kontrolü, yanlışlıkla yapılan değişikliklere karşı daha düzenli bir çalışma yöntemi sunar.

Git ile GitHub Arasındaki Fark Nedir?

Git ve GitHub sıklıkla birlikte anıldığı için aynı şey oldukları düşünülebilir. Ancak görevleri farklıdır.

Git, bilgisayarınızda çalışan ve dosyaların sürümlerini yöneten araçtır. GitHub ise Git depolarını çevrim içi ortamda barındırmaya ve bu depolar üzerinde ekip çalışması yürütmeye yarayan bir platformdur. Git ile çalışmak için GitHub hesabına sahip olmak zorunda değilsiniz.

Örneğin, internet bağlantınız olmasa bile bilgisayarınızda bir Git deposu oluşturabilir, dosyaları değiştirebilir ve commit kayıtları alabilirsiniz. GitHub gibi bir platforma bağlandığınızda ise yerel deponuzdaki değişiklikleri uzak depoya gönderebilir, diğer geliştiricilerin değişikliklerini alabilir ve kod inceleme süreçlerine katılabilirsiniz.

GitHub’ın yanı sıra Git depolarını barındıran başka platformlar da vardır. Hangi platformu seçerseniz seçin, temel Git komutlarının önemli bir bölümü aynı şekilde çalışır.

Git Nasıl Kurulur?

Git’i kullanmaya başlamadan önce bilgisayarınızda kurulu olup olmadığını kontrol edin. Terminal veya komut satırını açarak aşağıdaki komutu çalıştırın:

git --version

Kurulu bir Git sürümü varsa terminalde sürüm bilgisi görüntülenir. Komut bulunamadı şeklinde bir hata alıyorsanız Git’i yüklemeniz gerekir.

Windows, macOS ve Linux’ta Git kurulumu

Windows kullanıcıları Git’in resmî indirme sayfasındaki kurulum paketini kullanabilir. macOS üzerinde Git, Xcode Command Line Tools aracılığıyla kurulabilir veya sisteminize uygun başka bir kurulum yöntemi tercih edilebilir. Linux dağıtımlarında ise genellikle dağıtımın paket yöneticisi kullanılır.

Kurulum dosyalarını ve işletim sisteminize özel talimatları Git’in resmî web sitesinden inceleyebilirsiniz.

Kurulum tamamlandıktan sonra terminali yeniden açın ve sürüm kontrolünü tekrarlayın. Ardından Git’e commit kayıtlarında kullanılacak kullanıcı adını ve e-posta adresini tanımlayın:

git config --global user.name "Kullanıcı Adı"
git config --global user.email "[email protected]"

Buradaki bilgiler, oluşturacağınız commit kayıtlarının yazar bilgilerini belirler. --global seçeneği ayarların mevcut kullanıcı hesabı için genel olarak uygulanmasını sağlar. İsterseniz belirli bir projede farklı bilgiler kullanmak için depo içinde yerel ayarlar da tanımlayabilirsiniz.

Ayarları kontrol etmek için:

git config --list

E-posta adresinizin herkese açık depolarda görünmesini istemiyorsanız commit kimliğiniz için uygun bir gizlilik ayarı seçmeniz önemlidir. Git yapılandırmasındaki e-posta adresi, GitHub hesabınızın kullanıcı adıyla aynı olmak zorunda değildir.

İlk Git Projesi Nasıl Oluşturulur?

Git’i öğrenmenin en kolay yolu küçük bir proje üzerinden ilerlemektir. Örneğin, içinde bir index.html dosyası bulunan basit bir web projesi hazırlayabilirsiniz.

Öncelikle proje klasörünü oluşturun ve terminalde bu klasöre geçin. Ardından şu komutu çalıştırın:

git init

Bu komut, bulunduğunuz klasörde yeni bir Git deposu başlatır. Git, sürüm kontrolü için gerekli bilgileri .git adlı gizli bir dizinde tutar.

Önemli: git init mevcut dosyalarınızı otomatik olarak commit etmez. Yalnızca klasörü bir Git deposu hâline getirir. Dosyalarınızı sürüm geçmişine eklemek için ayrıca hazırlama ve commit işlemlerini gerçekleştirmeniz gerekir.

Projenin durumunu görmek için:

git status

Bu komut, Git’in hangi dosyaları takip ettiğini, hangi dosyaların değiştiğini ve hangi değişikliklerin bir sonraki commit için hazırlandığını gösterir.

Git add ve git commit ne işe yarar?

Git’in temel çalışma mantığında iki önemli adım bulunur: Değişiklikleri hazırlamak ve hazırlanan değişiklikleri geçmişe kaydetmek.

Örneğin, index.html dosyasını oluşturduğunuzda Git bu dosyayı henüz takip etmiyor olabilir. Dosyayı hazırlama alanına eklemek için:

git add index.html

Projedeki uygun tüm değişiklikleri hazırlamak için git add . komutu da kullanılabilir. Ancak bu komutu çalıştırmadan önce hangi dosyaların ekleneceğini kontrol etmek iyi bir alışkanlıktır.

Hazırlanan değişiklikleri kaydetmek için:

git commit -m "İlk proje sürümünü oluştur"

Bu işlem yeni bir commit oluşturur. Commit, hazırlama alanındaki değişikliklerin proje geçmişine kaydedilmiş bir sürümüdür.

Burada önemli bir ayrıntı vardır: git add dosyayı hazırlama alanına ekler, git commit ise hazırlanan içeriği yerel geçmişe kaydeder. Dosyayı değiştirdikten sonra yeniden git add çalıştırmazsanız son değişiklikler bir sonraki commit’e dahil edilmeyebilir.

Günlük Kullanımda En Çok İşe Yarayan Git Komutları

Git’in çok sayıda komutu vardır ancak başlangıçta bunların tamamını öğrenmeniz gerekmez. Günlük geliştirme sürecinde aşağıdaki komutlar çoğu temel işlemi gerçekleştirmenize yardımcı olur.

Git komutuGörevi
git statusDepodaki dosyaların durumunu gösterir.
git add dosyaBelirtilen dosyanın değişikliklerini hazırlama alanına ekler.
git commit -m "mesaj"Hazırlanan değişiklikleri geçmişe kaydeder.
git logCommit geçmişini listeler.
git diffHenüz hazırlanmamış değişiklikleri gösterir.
git diff --stagedHazırlama alanındaki değişiklikleri gösterir.
git branchYerel branch listesini gösterir.
git switch branch-adiBelirtilen branch’e geçer.
git merge branch-adiBelirtilen branch’teki değişiklikleri mevcut branch ile birleştirir.
git clone depo-adresiUzak bir deponun yerel kopyasını oluşturur.
git pullUzak depodaki değişiklikleri alıp mevcut yerel çalışma çizgisine entegre eder.
git pushYerel commit kayıtlarını uzak depoya gönderir.

Bu komutların ne yaptığını bilmek kadar hangi sırayla kullanılacağını anlamak da önemlidir. Örneğin, bir dosyada değişiklik yaptıktan sonra git status ile kontrol etmek, git diff ile farkları incelemek, ardından git add ve git commit komutlarını çalıştırmak daha kontrollü bir iş akışı sağlar.

Git Branch Nedir? Yeni Bir Özellik Nasıl Geliştirilir?

Branch, bir projenin geliştirme geçmişi içinde ayrı bir çalışma çizgisidir. Ana projeyi doğrudan değiştirmek yerine yeni bir branch oluşturarak farklı bir özellik üzerinde çalışabilirsiniz.

Örneğin, mevcut web sitenize bir arama bölümü eklemek istiyorsunuz. Bu özelliği doğrudan ana branch üzerinde geliştirmek yerine arama-ozelligi adında ayrı bir branch oluşturabilirsiniz:

git switch -c arama-ozelligi

Bu komut yeni branch oluşturur ve sizi otomatik olarak o branch’e geçirir. Artık yaptığınız değişiklikleri bu çalışma çizgisi üzerinde commit edebilirsiniz.

Mevcut branch’leri listelemek için:

git branch

Başka bir branch’e geçmek için:

git switch main

Buradaki main, ana branch’in yaygın adıdır. Projenizde ana branch farklı isimlendirilmiş olabilir.

Yeni özellik tamamlandığında değişiklikleri ana branch’e birleştirebilirsiniz. Önce ana branch’e geçin:

git switch main

Ardından yeni branch’teki değişiklikleri birleştirin:

git merge arama-ozelligi

Birleştirme işlemi sorunsuz tamamlanırsa yeni özellik ana geliştirme çizgisine dahil edilir. Birleştirme sonrasında eski branch’i silmek isterseniz şu komutu kullanabilirsiniz:

git branch -d arama-ozelligi

Branch kullanımı, özellikle aynı projede birden fazla özellik veya hata düzeltmesi üzerinde çalışırken düzen sağlar. Ekip çalışmalarında değişikliklerin incelenmesi ve onaylanması için de uygun bir temel oluşturur.

GitHub ile Git Kullanımı: Değişiklikler Nasıl Paylaşılır?

Yerel Git deponuz hazır olduğunda projeyi bir uzak depoyla eşleştirebilirsiniz. GitHub üzerinde boş bir depo oluşturduğunuzu varsayalım. Platformun sunduğu depo adresini yerel projenize eklemek için şu komutu kullanabilirsiniz:

git remote add origin DEPO_ADRESI

DEPO_ADRESI yerine GitHub’ın verdiği gerçek depo adresini yazmanız gerekir. origin, uzak depo için yaygın olarak kullanılan bir isimdir; zorunlu bir isim değildir.

Yerel branch’inizin adını main yapmak istiyorsanız ve bu ad henüz kullanılmıyorsa şu komutu çalıştırabilirsiniz:

git branch -M main

Ardından commit kayıtlarınızı uzak depoya gönderebilirsiniz:

git push -u origin main

Bu işlem yerel main branch’indeki commit’leri origin adlı uzak depodaki main branch’ine gönderir. -u seçeneği, sonraki işlemlerde kullanılacak takip ilişkisini kurar.

Bir ekip arkadaşınız uzak depoya yeni değişiklikler gönderdiyse bunları almak için genellikle şu komut kullanılır:

git pull

Bu komut, yapılandırılmış uzak kaynaktaki değişiklikleri alır ve mevcut branch ile entegre eder. Çakışma oluşması veya uzak geçmişin yerel geçmişle uyumlu olmaması gibi durumlarda ek işlem gerekebilir.

GitHub üzerinden başka geliştiricilerin katkılarını incelemek ve birleştirmeden önce değerlendirmek için pull request mekanizması da kullanılabilir. Bu yöntem, özellikle doğrudan ana branch’e gönderim yapılmayan ekiplerde kod inceleme sürecini kolaylaştırır.

Git Merge Conflict Nedir? Çakışmalar Nasıl Çözülür?

İki farklı branch’te aynı dosyanın aynı bölümü değiştirilmişse Git hangi değişikliğin korunması gerektiğine her zaman otomatik olarak karar veremez. Bu durumda merge conflict, yani birleştirme çakışması oluşabilir.

Git, çakışan bölümü dosyada aşağıdakine benzer işaretlerle gösterebilir:

<<<<<<< HEAD
Başlık: Yeni Ürünler
=======
Başlık: Öne Çıkan Ürünler
>>>>>>> arama-ozelligi

Bu işaretler, mevcut branch’teki içerikle birleştirilen branch’teki içeriği birbirinden ayırır. Çözüm için dosyayı açıp hangi içeriğin korunacağına karar vermeli, gerekiyorsa iki değişikliği birleştirerek doğru sonucu oluşturmalısınız.

Düzenleme tamamlandıktan sonra çakışma işaretlerini kaldırın ve dosyanın son hâlini kontrol edin. Ardından:

git add index.html
git commit -m "Birleştirme çakışmasını çöz"

Bu örnekte index.html dosyasının çakışma içeren dosya olduğunu varsayıyoruz. Gerçek projede komutlarda kendi dosya adınızı kullanmalısınız. Bazı birleştirme işlemlerinde Git otomatik olarak birleştirme commit’i oluşturabilir veya farklı bir tamamlama adımı gerekebilir. Bu nedenle işlemden önce git status çıktısını kontrol etmek önemlidir.

Çakışma oluşması, projenin bozulduğu anlamına gelmez. Git yalnızca hangi değişikliğin seçilmesi gerektiği konusunda karar veremediğini bildirir. Dosyanın son hâlini dikkatle düzenlemek sorunu çoğu zaman çözer.

Git ile Yapılan Değişiklikler Nasıl Geri Alınır?

Git’in en kullanışlı yönlerinden biri, değişiklikleri inceleme ve belirli işlemleri geri alma olanağı sunmasıdır. Ancak her geri alma komutu aynı sonucu doğurmaz. Bazıları yalnızca dosyalardaki düzenlemeleri etkilerken bazıları commit geçmişini değiştirir.

Henüz hazırlama alanına eklenmemiş değişiklikleri görmek için:

git diff

Hazırlanmış değişiklikleri kontrol etmek için:

git diff --staged

Bir commit’in hangi dosyaları değiştirdiğini ve commit geçmişini incelemek için:

git log --oneline

Önceki bir commit’in yaptığı değişiklikleri geri almak istediğinizde git revert kullanılabilir. Bu komut, önceki değişiklikleri tersine çeviren yeni bir commit oluşturur:

git revert COMMIT_KIMLIGI

COMMIT_KIMLIGI yerine geri almak istediğiniz commit’in kimliğini yazmalısınız. Özellikle başkalarıyla paylaşılan branch’lerde, geçmişi yeniden yazmak yerine git revert kullanmak daha güvenli bir seçenek olabilir.

Öte yandan git reset ve git restore gibi komutlar farklı amaçlara hizmet eder. Yanlış seçeneklerle kullanıldıklarında commit’leri veya yerel değişiklikleri erişilmesi zor hâle getirebilir ya da kaybettirebilirler. Bu nedenle neyi geri almak istediğinizden emin olmadan gelişigüzel geri alma komutları çalıştırmayın. Önemli dosyalarda işlem yapmadan önce yedek almak da faydalıdır.

.gitignore Dosyası Neden Önemlidir?

Her proje dosyasının sürüm kontrolüne eklenmesi gerekmez. Önbellek dosyaları, geçici çıktılar, yerel ortam ayarları ve bağımlılık dizinleri gibi içerikler projeye göre Git dışında tutulabilir.

Bunun için proje kök dizininde .gitignore adlı bir dosya oluşturulur. Örneğin:

.env
.env.local
node_modules/
vendor/
.DS_Store

Bu örnek, ilgili desenlerle eşleşen dosya ve dizinlerin Git tarafından izlenmeyen değişiklikler olarak değerlendirilmesini önlemeye yardımcı olur. Ancak .gitignore, daha önce Git tarafından takip edilmeye başlanmış bir dosyayı otomatik olarak takip dışına çıkarmaz.

Özellikle .env gibi dosyalar veritabanı parolaları, API anahtarları veya başka gizli bilgiler içerebilir. Bu bilgileri herkese açık bir depoya göndermemek önemlidir. Gizli bilgiler yanlışlıkla commit edilmişse yalnızca dosyayı sonraki sürümden silmek yeterli olmayabilir; önce sızan anahtarları veya parolaları geçersiz kılmalı, ardından gerekirse depo geçmişi için ek temizlik işlemleri uygulamalısınız.

Git Kullanırken Yapılan Yaygın Hatalar

Git’i öğrenirken karşılaşılan sorunların önemli bir bölümü, komutların ne yaptığını bilmeden uygulanmasından kaynaklanır. Aşağıdaki alışkanlıklar daha kontrollü çalışmanıza yardımcı olabilir:

  • Commit mesajlarını belirsiz yazmak: değişiklik yapıldı gibi mesajlar yerine hangi işin tamamlandığını anlatan kısa ifadeler kullanın.
  • Değişiklikleri kontrol etmeden commit almak: git status ve git diff komutlarıyla kaydedilecek içeriği inceleyin.
  • Her şeyi tek commit’te toplamak: Birbiriyle ilgisiz değişiklikleri mümkün olduğunda ayrı ve anlamlı commit’lere bölün.
  • Uzak depoya göndermeyi unutmak: Commit kayıtları varsayılan olarak yerel depoya kaydedilir. git push yapılmadıkça uzak depoya gönderilmiş olmaz.
  • Gizli bilgileri depoya eklemek: .env dosyalarını ve parolaları kontrol edin, uygun .gitignore kuralları kullanın.
  • Geri alma komutlarını gelişigüzel çalıştırmak: reset, restore ve revert komutlarının farkını öğrenmeden önemli değişiklikleri riske atmayın.
  • Ana branch üzerinde kontrolsüz çalışmak: Yeni özellikleri ayrı branch’lerde geliştirmek, inceleme ve test sürecini kolaylaştırabilir.

Bir diğer önemli nokta da Git’in tek başına yedekleme sistemi olmadığıdır. Yerel diskiniz bozulursa ve değişikliklerinizi başka bir depoya veya yedekleme sistemine aktarmadıysanız verilerinizi kaybedebilirsiniz. Uzak depolar ve düzenli yedekler, farklı risklere karşı koruma sağlar.

Sonuç: Git Öğrenmeye Nereden Başlamalısınız?

Git, yazılım geliştirme sürecini daha izlenebilir ve yönetilebilir hâle getiren temel araçlardan biridir. Değişiklikleri kaydetmek, önceki sürümleri incelemek, farklı özellikleri ayrı branch’lerde geliştirmek ve ekip arkadaşlarıyla çalışmak için kapsamlı olanaklar sunar.

Başlangıçta bütün komutları ezberlemek yerine küçük bir proje oluşturup git init, git status, git add ve git commit komutlarıyla çalışmaya başlayabilirsiniz. Ardından git log ve git diff ile geçmişi incelemeyi, branch oluşturmayı ve GitHub gibi bir platformla uzak depo yönetimini öğrenebilirsiniz.

Git’i etkili kullanmanın temelinde komut sayısından çok, yapılan değişiklikleri bilinçli biçimde yönetmek vardır. Düzenli commit’ler, açıklayıcı mesajlar, doğru branch kullanımı ve dikkatli geri alma işlemleri sayesinde hem bireysel projelerde hem de ekip çalışmalarında daha güvenilir bir geliştirme süreci oluşturabilirsiniz.