Program
Git, yazılım geliştirici, veri bilimci, veri mühendisi veya makine öğrenimi uygulayıcısı olun, kodla çalışan herkes için vazgeçilmez bir araçtır. Ekiplerin aynı projede eşzamanlı çalışmasını sağlar ve kod değişikliklerinin net bir geçmişini sunarak güncellemeleri izlemeyi ve yönetmeyi kolaylaştırır.
Bu yazıda, en sık kullanılan Git komutlarını, sözdizimlerini ve günlük işinizde nasıl uygulayabileceğinizi adım adım anlatacağım!
Temel Git Komutları
Git ile çalışmanın temel adımları; bir depo oluşturmak, var olan bir depoyu kopyalamak ve kodu düzenlemeyi içerir. Bu bölümde bu temel git işlevlerini ayrıntılı olarak, onları uygulamak için gereken sözdizimiyle birlikte inceleyeceğiz.
Git kurmanız mı gerekiyor? Sisteminizde Git’i kurmak için bu kılavuzu izleyin.
git init
git init komutu yeni bir Git deposu oluşturur veya mevcut bir depoyu yeniden başlatır.
Komutu çalıştırdığınızda geçerli dizininiz bir Git deposuna dönüşür ve değişikliklerini izleyebilirsiniz. Dizin içine gizli bir .git klasörü ekler; Git burada tüm üstveriyi, sürüm geçmişini ve projeyle ilgili günlükleri saklar.
git clone
Bir Git deposunu bir konumdan başka bir konuma kopyalamak için git clone komutunu kullanırız. Genellikle GitHub veya GitLab gibi uzak sunuculardaki mevcut bir depoyu, günlükleri ve sürümleriyle birlikte yerel makinenize kopyalar.
Adım 1: Klonlamak istediğiniz GitHub deposuna gidin ve “Code”a tıklayın.

git clone komutu
Adım 2: Görselde gösterildiği gibi URL’yi kopyalayın.

git clone temel komutu
Adım 3: Bu depoyu yerel makinenizde klonlamak istediğiniz dizine gidin ve şu komutu çalıştırın:
git clone <copied_URL>
git status
git status komutu bize şu detayları gösterir:
- değiştirilmiş dosyalar (değiştirilmiş ancak aşamaya alınmamış dosyalar).
- izlenmeyen dosyalar (Git’in izlemediği dosyalar).
- aşamaya alınmış dosyalar (aşamaya alınmış ve commit edilmeye hazır dosyalar).
Sözdizimi şöyledir:
git status

Git status komutu
git add
git add komutu değişikliklerinizi hazırlık (staging) alanına ekler. Bu, kullanıcı commit komutunu çalıştırdığında deponun bu değişikliklerle güncellenmesi gerektiğini Git’e bildirir.
git add .: tüm dosyalarda yapılan değişiklikleri aşamaya alır.git add <file_name>: yalnızca belirli bir dosyada yapılan değişiklikleri hazırlık alanına dahil eder.
git commit
git commit komutu, yaptığınız (veya aşamaya aldığınız) değişiklikleri yerel depoya kaydeder. Her git commit çalıştırdığınızda Git, o andaki deponuzun bir anlık görüntüsünü oluşturur. Bu sayede gerektiğinde önceki bir commite geri dönebilirsiniz.
Sözdizimi şöyledir:
git commit -m "commit_message"
Commit mesajı, commit içindeki değişikliklerin kısa bir açıklamasıdır.
Uzak Depolarla Çalışma
GitHub, uygulamaları uzak sunucularında barındırır ve geliştiricilerin bunları izlemesine ve yönetmesine olanak tanır. Bu bölümde, Git komutlarını kullanarak bu uzak depoları nasıl çıkaracağımızı, aktaracağımızı ve onlarla nasıl etkileşime geçeceğimizi göreceğiz.
GitHub’ın nasıl çalıştığını öğrenmek ister misiniz? Depoları, çekme isteklerini ve iş birliği en iyi uygulamalarını anlamak için GitHub Kavramlarına Giriş ile başlayın.
git remote add
git remote add komutu, yerel Git deponuz ile uzak Git deposu arasında bir bağlantı oluşturur; böylece aralarında değişiklikleri itip çekebilirsiniz:
git remote add <repo_name> <remote_url>
<repo_name>: uzak depo için bir takma ad (“origin” varsayılandır).<remote_url>: uzak deponun URL’si.
git push
git push komutu, uzak deponuzu yerel depo ile senkronize eder. Bu komutu çalıştırdıktan sonra, uzak depo yerelde commit ettiğiniz tüm değişiklikleri yansıtır.
git push <remote> <branch>
<remote>: uzak depo için takma ad (“origin” varsayılandır).<brach>: itmek istediğiniz dalın adı.
git push için bazı varyasyonlar vardır, örneğin:
git push ---all origin
Yukarıdaki komut, tüm yerel dallarınızı uzak depoya iter.
git push --force origin main
Yukarıdaki komut, uzak depodaki main dalını, yerel main dalınızla üzerine yazar. Dikkatli kullanın; uzak main dalı tüm geçmişini kaybedebilir.
git pull
git pull komutu, uzak depodaki değişiklikleri alır ve yerel depodakilerle birleştirir.
git pull komutu iki komutu birleştirir: git fetch ve git merge.
Önce git fetch, uzak depodan yeni commitler, etiketler ve dallar dahil tüm değişiklikleri çeker. Ardından git merge çalışır ve bu değişiklikleri geçerli yerel dala entegre eder.
Sözdizimi şöyledir:
git pull origin feature-branch
Yukarıdaki komut, uzak depodaki feature_branch’ten verileri alır ve geçerli yerel dalınıza uygular.
git fetch
git fetch komutu, değişiklikleri yerelinize birleştirmeden önce uzak depodaki değişiklikleri gözden geçirmenizi sağlar. Değişiklikleri indirir ve bunları uzak izleme dallarına günceller. Bilinmeyenler için, uzak izleme dalları uzak depodaki dalların kopyalarıdır.
Örneğin, aşağıdaki komut değişiklikleri uzak depodan indirir ve origin altındaki uzak izleme dallarına günceller:
git fetch origin
Git’te Dallanma ve Birleştirme
Git dallanma, geliştiricilerin ana depoyu etkilemeden yeni özellikler veya hata düzeltmeleri üzerinde bağımsız çalışmasına olanak tanır. Değişiklikler hazır olduğunda, birleştirme (merge) bunları ana kod tabanına entegre eder. Bu süreçteki temel komutları inceleyelim.
git branch
git branch komutu dalları listeler, oluşturur veya siler. Bir dal, deponuzun başka bir sürümüdür.
Uygulamanız için yeni bir özellik geliştiriyorsanız yeni bir dal oluşturup üzerinde çalışabilirsiniz.Değişiklikler hazır ve test edilmiş olduğunda bu yeni dalı ana dala birleştirebilirsiniz. Bu, ana hattı doğrudan karıştırmadan yeni özellikler üzerinde bağımsız çalışmanızı sağlar.
git branch: depodaki tüm dalların listesini verir.git branch <branch_name>: “branch_name” adlı yeni bir dal oluşturur.git branch -d <branch_name>: “branch_name” adlı dalı siler.
git checkout
git checkout komutu iki şey yapabilir: dallar arasında geçiş yapmak veya dosyaları önceki bir duruma döndürmek.
- Dallar arasında geçiş: Git 2.23’ten önce, mevcut dalınızdan başka bir dala geçmek için
git checkout branch_namekomutu kullanılırdı. Yalnızca geçiş için değil; yeni bir dal oluşturup ona geçmek için de kullanılabilirdi.
Aşağıdaki komut, “feature_branch” adlı yeni bir dal oluşturur ve ona geçer:
git checkout -b feature_branch
Ancak Git’in en yeni sürümünde, dosyaları geri yüklemek için git checkout yerine git switch tercih edilir.
- Dosyaları geri yükleme: Bir dosyada yaptığınız değişiklikleri atabilir ve onu önceki sürümüne şu komutla döndürebilirsiniz.
git checkout -- <file-name>
Bunu başka bir daldaki bir dosya için de şu şekilde yapabilirsiniz:
git checkout <branch-name> -- <file-name>
git merge
Yeni bir dalda bazı çalışmalar yaptıysanız, değişiklikleri uygulamak için git merge kullanarak bunu ana dala birleştirebilirsiniz. Git, birleştirmeyi iki şekilde gerçekleştirir:
- Hızlı İleri (Fast forward) birleştirme: Diyelim ki ana daldan “feature_x” adlı yeni bir dal oluşturdunuz ve üzerinde çalıştınız. “feature_x”i oluşturduğunuzdan beri ana dalda güncelleme yapılmadıysa, “feature_x” değişikliklerini ana dala merge etmek yerine Git, ana dalı “feature_x”in en son sürümünü işaret edecek şekilde günceller. Bu durumda yeni bir birleştirme commit’i oluşturulmaz.
- Üç yönlü (Three-way) birleştirme: Hem “feature_x” hem de ana dalda düzenlemeler varsa, Git değişiklikleri birleştirir ve ana dal üzerinde yeni bir merge commit’i oluşturur.
Örneğin:
C---D---F (feature-branch)
/
A---B---E---G (main)
B commit’inde C özellik dalı oluşturulur. Ana dal, özellik dalı oluşturulduktan sonra bile E ve G gibi ek commit’ler alır. Bu nedenle özellik dalı ana dala birleştirilir ve aşağıdaki gibi yeni bir birleştirme commit’i M oluşturulur:
C---D---F (feature-branch)
/ \
A---B---E---G---M (main)
git rebase
git rebase, dallar arasındaki değişiklikleri entegre etmenin başka bir yoludur, ancak git merge’den farklı çalışır. Merge, hem ana hem de özellik dalının tam geçmişini korur. Rebase ise commit geçmişini üzerine yazarak doğrusal ve temiz hale getirir.
Ayrıca, merge ek bir birleştirme commit’i gerektirirken rebase yeni commit oluşturmaz. Git rebase iki adımda çalışır:
- Özellik dalına geçin
- Ana dala rebase edin.
Örneğin:
C---D---F (feature-branch)
/
A---B---E---G (main)
- Adım 1:
git checkout feature_branchkomutunu çalıştırın. - Adım 2:
git rebase mainçalıştırılır: Tüm özellik dalını ana dalın üzerine taşıyarakC,D,Fcommit’lerini, ana daldaki en sonGcommit’inin üzerineC’,D’veF’olarak yeniden uygular. Böylece aşağıdaki gibi doğrusal bir commit geçmişi oluşur:
A---B---E---G---C'---D'---F' (main)
Merge ve rebase işlemleri sıklıkla karıştırıldığından, farkların özeti şöyledir:
|
Merge |
Rebase |
|
Her iki dalın tüm commit geçmişini korur. |
Commit geçmişini doğrusal olacak şekilde üzerine yazar. |
|
Ek bir merge commit’i oluşturulur. |
Ek commit oluşturulmaz. |
|
Geçmişte dal yapısı görünür. |
Commit geçmişini dümdüz bir çizgi gibi gösterir. |
|
Hangi dalların ne zaman birleştirildiğini içeren her dalın commit geçmişini takip etmek için kullanın. |
Açık ve kolay anlaşılır bir commit geçmişine ihtiyaç duyduğunuzda kullanın. |
Uzak dallarla çalışmayı daha fazla öğrenmek ister misiniz? git checkout kullanarak uzak dalları nasıl check out edip izleyeceğinizi bu adım adım eğitimde öğrenin.
Git Geçmişi ve Değişiklikleri Geri Alma
Git, geliştirme sürecinin farklı aşamalarında geçmişi görüntülemek ve değişiklikleri geri almak için çeşitli komutlar sunar. İlgili komutlar burada ele alınmıştır.
git log
git log komutu, geçerli dalınızın tüm commit geçmişini görüntüler. Dört temel alan içerir: commit, yazar, tarih ve commit mesajı.

git commit geçmişi
- Commit: benzersiz bir kimlik.
- Yazar: kişinin adı ve e-postası.
- Tarih: değişikliğin ne zaman commit edildiğine dair zaman damgası.
- Commit mesajı: commit’in açıklaması.
git diff
git diff, deponuzun çeşitli durumları arasındaki farkları gösterir — geçerli dizininizi hazırlık alanına karşı, hazırlık alanını son commite karşı ya da belirttiğiniz iki dosya veya dalı karşılaştırabilirsiniz.
git diff- geçerli çalışma dizininiz ile hazırlık alanı arasındaki farkları gösterir.git diff -- cached: hazırlık alanı ile son commit arasındaki farkları gösterir.git diff commit1 commit2-commit 1ilecommit 2arasındaki farklar.git diff branch1..branch2-branch 1ilebranch 2arasındaki farkları karşılaştırır.
git reset
git reset komutu, geçerli HEAD’i belirli bir önceki duruma sıfırlayarak değişiklikleri geri almanızı sağlar. HEAD’i önceki bir commite taşımak için “soft”, “mixed” ve “hard” olmak üzere üç varyasyon vardır.
- Soft: önceki bir commite geri döner ancak mevcut değişiklikleri aşamada tutar; böylece gerektiğinde yeniden commit edebilirsiniz.
git reset --soft HEAD~1
- Mixed: önceki bir commite döner ve mevcut commit değişikliklerini hazırlık alanından kaldırır. Ancak bu değişiklikler çalışma dizininizde kalır.
git reset --mixed HEAD~1
- Hard: önceki bir commiti işaret ederken, mevcut commit güncellemelerini hem çalışma dizininden hem de hazırlık alanından kaldırır.
git reset --hard HEAD~1
Git’te değişiklikleri geri almanız mı gerekiyor? Şu ayrıntılı kılavuzda git reset ile git revert arasındaki farkları keşfedin.
Git’te Saklama (Stash) ve Temizlik
Git ile çalışırken, değişiklikleri commit etmeden geçici olarak bir kenara koymanız veya deponuzu gereksiz dosyalardan temizlemeniz gerekebilir. İşte bu noktada Git stash ve temizlik komutları devreye girer.
git stash
Diyelim ki önceki bir duruma dönmek istiyorsunuz ancak mevcut ilerlemenizi commit etmek istemiyorsunuz; git stash kullanabilirsiniz. Bu, commit edilmemiş değişikliklerinizi geçici olarak kaydeder ve çalışma dizininizi son commit edilmiş duruma sıfırlar.
git stash pop
Geçmişte bazı değişiklikleri stash’lediyseniz ve bunları çalışma dizininize dahil etmek istiyorsanız git stash pop komutunu kullanın. Bu, en son saklanan değişiklikleri geçerli dizine uygular ve stash listesinden kaldırır.
git clean
git clean komutu, Git deposundan izlenmeyen dosyaları siler. Silme işlemini çalıştırmadan önce nelerin silineceğini önizlemek için git clean -n komutunu kullanın!
Git geçmişinizi temizlemek mi istiyorsunuz? Birden fazla commiti tek bir committe birleştirmeyi bu Git squash eğitimi ile öğrenin.
Git Yapılandırması ve Kullanıcı Ayarları
Git, kullanıcı ayarlarını farklı düzeylerde yapılandırmanıza olanak tanır. Bunları burada inceleyelim.
git config
git config komutu, Git ayarlarını ihtiyaçlarınıza göre özelleştirmenize olanak tanır. Ayarları üç düzeyde yapılandırabilirsiniz: yerel, sistem ve genel (global) düzey.
- Sistem düzeyi: En kapsamlı yapılandırma düzeyidir ve kök (root) erişimi gerektirir.
- Genel (Global) düzey: bu düzeydeki yapılandırmalar, geçerli kullanıcı için tüm depolara uygulanır.
- Yerel düzey: Geçerli Git deposuna özgü ayarlar bu düzeyde özelleştirilebilir.
Bazı yaygın git config komutları şunlardır:
git config -list: Tüm düzeylerdeki Git ayarlarını görüntüler.git config --global user.name "Your_name": Sisteminizdeki tüm depolar için Git kullanıcı adını “Your_name” olarak ayarlar.git config --global user.email "your.email@example.com": Sisteminizdeki tüm depolar için e-posta adresini ayarlar.
Bir Git deposu başlatılırken varsayılan ana dalın master olduğunu biliyoruz. Ancak aşağıdaki komutla istediğiniz adı verebilirsiniz:
git config --global init.defaultBranch "srujana_master"
Yukarıdaki komutta, varsayılan master dalını küresel düzeyde (sistemdeki tüm depolar için) "srujana_master" ile değiştirdik.
Diğer genel düzey ayarları da uygulayabilirsiniz. Örneğin, varsayılan metin düzenleyicinizi VS Code olarak değiştirmek için şu komutu çalıştırın:
git config -global core.editor "code-w"
Kendi Git komutlarınızı da oluşturabilirsiniz. Örneğin:
git config --global alias.slice branch
Yukarıdaki komut, branch için yeni bir slice takma adı oluşturur. Dolayısıyla yeni bir dal oluşturmak istediğinizde, git branch branch_name yerine git slice branch_name çalıştırabilirsiniz.
Git Komutları Özeti
Elinizin altında bulundurmanız için incelediğimiz Git komutlarının özeti:
|
Komut |
Açıklama |
Örnek kullanım |
|
|
Yeni bir Git deposu başlatır. |
|
|
|
Mevcut bir Git deposunu klonlar. |
|
|
|
Çalışma dizinindeki dosyaların durumunu kontrol eder. |
|
|
|
Dosyaları hazırlık alanına ekler. |
|
|
|
Aşamaya alınmış değişiklikleri yerel depoya commit eder. |
|
|
|
Uzak bir depo bağlantısı ekler. |
|
|
|
Commit edilmiş değişiklikleri uzak depoya iter. |
|
|
|
Uzak depodan değişiklikleri alır ve birleştirir. |
|
|
|
Uzak depodan değişiklikleri birleştirmeden alır. |
|
|
|
Dalları listeleyin, oluşturun veya silin. |
|
|
|
Dallar arasında geçiş yapın veya dosyaları geri yükleyin (eski yöntem). |
|
|
|
Dallar arasında geçiş yapın (yeni sürümlerde tercih edilir). |
|
|
|
Bir daldaki değişiklikleri başka bir dala birleştirir. |
|
|
|
Daha temiz bir geçmiş için bir daldaki commit’leri başka bir dalın üzerine yeniden uygular. |
|
|
|
Commit geçmişini görüntüler. |
|
|
|
Depodaki çeşitli durumlar arasındaki farkları gösterir. |
|
|
|
HEAD’i önceki bir duruma sıfırlayarak değişiklikleri geri alır. |
|
|
|
Commit edilmemiş değişiklikleri geçici olarak kaydeder ve çalışma dizinini sıfırlar. |
|
|
|
En son saklanan değişiklikleri çalışma dizinine uygular. |
|
|
|
Depodan izlenmeyen dosyaları kaldırır. |
|
|
|
Git ayarlarını sistem, genel veya yerel düzeyde yapılandırır. |
|
Git Kullanımı için En İyi Uygulamalar
Git’i etkili kullanmak, değişiklikleri izlemekten ibaret değildir — temiz, düzenli ve işbirliğine dayalı bir iş akışı sürdürmekle ilgilidir. En iyi uygulamaları takip etmek, deponuzun düzenli kalmasını, commit geçmişinizin anlamlı olmasını ve geliştirme sürecinizin sorunsuz ilerlemesini sağlar.
Git ile çalışırken benimsemeniz gereken bazı alışkanlıklar:
- Sık sık commit edin: Git gibi bir sürüm kontrolü kullanmanın başlıca amaçlarından biri, zaman içinde değişiklikleri etkin biçimde izlemektir. Birden çok değişikliği tek seferde güncellemek yerine her değişikliği ayrı ayrı commit ettiğinizde, daha sonra her commit’te neyin değiştiğini anlamak kolaylaşır.
- Açık mesajlarla commit edin: Her commit’i, o commit’in neyle ilgili olduğunu anlatan net bir mesajla eşleştirin. Commit’leri takip ederken, her commit’in koda hangi değişiklikleri getirdiğini görmek çok daha kolay olur.
- Dalları kullanın: Her yeni özellik veya hata düzeltmesi için bir dal oluşturun, üzerinde çalışın ve birleştirin. Bu, yeni geliştirme çalışmalarını ana projeden ayırmanın en iyi uygulamasıdır.
- .gitignore’dan yararlanın: .gitignore dosyası, projeyle ilgili ancak izlenmesi gereksiz dosya ve dizinleri içerir. Bunlar genellikle otomatik üretilen dosyalar, derleme çıktıları, günlükler, geçici ve platforma özgü dosyalardır. Bunları yok saymak, gereksiz günlükleri ve sürüm takibini önler; geçmişinizi temiz tutar.
Sonuç
Git; değişiklikleri izlemek, başkalarıyla iş birliği yapmak ve iyi yapılandırılmış bir geliştirme iş akışını sürdürmek için güçlü bir araçtır. Bu yazıda, projelerinizi daha etkili yönetmenize yardımcı olacak temel Git komutlarını ve en iyi uygulamaları ele aldım.
Elbette öğrenilecek her zaman daha fazlası var! Yeni başlıyorsanız, sağlam bir temel oluşturmak için Git’e Girişe göz atın. Becerilerini daha da geliştirmek isteyenler için Orta Düzey Git, gelişmiş iş akışları ve tekniklere daha derinlemesine iner.
Gelecek projeler için hızlı bir Git başvurusuna mı ihtiyacınız var? Temel komutları elinizin altında tutmak için bu Git cheat sheet’ine göz atın!
FAQs
git pull ve git fetch arasındaki fark nedir?
git pull, uzak depodan değişiklikleri alır ve yerel dalınıza birleştirir; git fetch ise yalnızca güncellemeleri indirir ve birleştirmeden önce gözden geçirmenize olanak tanır.
Bir Git dalının adını nasıl değiştiririm?
Geçerli dalın adını değiştirmek için:
git branch -m new-branch-name
Başka bir dalın adını değiştiriyorsanız:
git branch -m old-branch-name new-branch-nameGit’te bir dalı nasıl silerim?
Yerel bir dalı silmek için:
git branch -d branch-name
Uzak bir dalı silmek için:
git push origin --delete branch-namegit merge ve git rebase arasındaki fark nedir?
git merge, değişiklikleri farklı dallardan birleştirirken geçmişi korur; git rebase ise daha temiz, doğrusal bir sıra oluşturmak için commit geçmişini yeniden yazar.
Bir git commit’ini geri alabilir miyim?
Evet! Son commit’i geri alıp değişiklikleri hazırlık alanında tutmak için:
git reset --soft HEAD~1
Son commit’i geri alıp değişiklikleri hazırlık alanından kaldırmak için:
git reset --mixed HEAD~1
Değişiklikleri tamamen atmak için:
git reset --hard HEAD~1Şu anda hangi dalda olduğumu nasıl kontrol ederim?
Şunu çalıştırın:
git branch --show-current
Ya da basitçe:
git statusTek bir dosyadaki değişiklikleri nasıl geri alırım?
Aşamaya alınmamış değişiklikleri bir dosyada atmak için:
git checkout -- filename
Bir dosyayı son commit edilmiş durumuna döndürmek için:
git restore filenameBir Git deposundaki tüm uzak dalları nasıl listelerim?
Şunu kullanın:
git branch -rGit’te bir dalı zorla nasıl push ederim?
Zorla push yaparken dikkatli olun; uzak değişikliklerin üzerine yazar:
git push --force origin branch-nameGit commit’lerimin grafiksel geçmişini nasıl görürüm?
Commit geçmişinizin grafiksel bir görselleştirmesini istiyorsanız:
git log --oneline --graph --all --decorateSrujana, Bilgisayar Bilimleri alanında dört yıllık dereceye sahip serbest çalışan bir teknoloji yazarıdır. Veri bilimi, bulut bilişim, geliştirme, programlama, güvenlik ve daha birçok konuyu yazmak onun için doğal bir süreçtir. Klasik edebiyata ve yeni yerler keşfetmeye tutkuyla bağlıdır.

