1 – GIT CONFIGURATION
Log yazdığımızda gözükecek ismimiz için,
git config --global user.name "userName"
Gözükecek ismimizi kontrol etmek için ise,
git config user.name
komutlarını kullanırız.
GitHub’ta bulunan hesabımızı bağlamamız adına,
git config --global user.email “githubMail”
Girdiğimiz maili görebilmemiz için ise,
git config --global user.email “githubMail”
komutlarını kullanırız.
2 – INITIALIZE GIT
GitHub üzerinden bir boş depo oluşturalım.

Repository Name: Proje İsmi
Description : Açıklama
Choose visibility:
– Public : Herkese Açık
– Private : Gizli – Arkadaşlarınızı davet edip birlikte proje yapmanıza olanak sağlayan seçenek mevcuttur.
Readme : Projeniz hakkında bilgi verebileceğiniz markdown dosyasıdır.
.gitignore : Projenizde izlenmesi istemediğiniz dosyalar veya klasörler için kullanılan bir ayar dosyasıdır. Güvenlik amacıyla şifrelerin olduğu dosyalar, gereksiz sistem dosyaları vb. durumlar için kullanılır.
License : Proje lisansını belirtir.
git init
Proje klasörünü, git’in takip ettiği bir depoya dönüştürür. Gizli bir .git adında klasör oluşur. Artık klasörün tüm hareketleri bu klasördedir. Eğer ki git ile bağlantısını komple kesmek isterseniz, direkt olarak .git klasörünü silebilirsiniz.
git add .
Projenizdeki tüm klasör ve dosyaları kalıcı olarak kaydetmek üzere bir hazırlık alanında toplar. Projede yeni bir kod eklemiş, mevcut bir dosyayı değiştirmiş veya silmiş olabilirsiniz; yaptığınız tüm bu güncellemeleri tek seferde paketlemeye hazır hale getirir.
. (nokta) – Bulunduğumuz dizin ve onun altındaki tüm klasörlerde yer alan her şeyi simgeler. Bunun yerine tek tek git add dosya.js ekleme yapabilirsiniz ama bu karışıklığa yol açabilir.
git commit -m "first commit"
Commit (Kaydetme), hazırlık alanında toplanan projenizi kalıcı olarak yerel deponuza kaydeder. -m (Mesaj) ile kayıt işlemine dair bir açıklama yapmanız gerekir. Bu mesaj, “Proje üzerinde ne değişiklikler yaptım?” sorusuna cevap vermesi kolaylık sağlayacaktır.

GitHub üzerinden boş bir repository oluşturmuştuk. Şimdi bunları birbirlerine bağlama vaktidir. Buraya kadar ki işlemleri yaptıysanız GitHub üzerinden verilen, aşağı kısımda bulunan komutları direkt yapıştırabilirsiniz. Yapmadıysanız direkt olarak üst kısımda bulunan komutları kullanabilirsiniz. Kopyala – yapıştır bizim yararımıza olmaz diyip, bu komutların ne işe yaradığının mantığını anlamaya devam edelim.
git remote add origin proje-link
Yerel projemizin, GitHub’ta ki depomuzu birbirine bağlayan köprüyü inşa ederiz. remote add komutu ile uzak bir depoyla bağlantı kuracağımızı temsil ederken, origin ise GitHub’taki depomuzu temsil etmektedir. Kısaca,
origin = proje-link buradaki origin için başka bir isim de koyabilirsiniz. Standart olduğundan dolayı direkt olarak origin kullanılmaktadır.
git branch -M main
Proje bir ağaç, branch’leri ise bu ağacın dalları olarak düşünebilirsiniz. Bu komut ile ana dalımızın ismini main olarak güncellememizi sağlar. Çok öncesinde git ana dal ismini ‘master’ olarak oluşturmuştur. Sonrasında kapsayıcı bir dil kullanmak üzere bu komut ile ismini ‘main’ olarak güncellemiştir.
git push -u origin main
Yerelimizde kalıcı olarak kaydettiğimiz tüm değişiklikleri GitHub’a, uzak depomuza gönderdiğimiz komuttur. push, uzak sunucuya yüklemeyi temsil eder. -u origin main, yerel main branch’i ile githubtaki main branch’i bağlar. Bu komutu bir kez çalıştırmamız yeterli olacaktır. Yeni tanıştığınız kişinin telefon numarasını aldınız ve rehbere eklediniz. Daha sonrasında bu kişiyi aramak için uzun uzun telefon numarası yazmanıza gerek kalmaz. Bundan sonra push etmek için direkt olarak git push yazabilirsiniz.
3 – CLONE
Bir senaryo ile başlayalım. Örneğin, bir arkadaşınız ile projenizi bitirdiniz ve daha sonrasında projenize eklemeler yapmak istediniz fakat proje yerelde bulunmuyor. Bu senaryo için çözümümüz klonlamadır.
git clone url

HTTPS – Web üzerinden klonlama yapar.
SSH – Bilgisayar ile GitHub arasında şifreli bir kimlik (SSH Anahtarı) oluşturarak klonlama yapar.
GitHub CLI – GitHub’ın kendi terminal aracı üzerinden klonlama yapar.
Download ZIP – Normal bir klasör gibi indirir. Git komutları kullanılmaz. Sadece kod okumak için ideal bir seçenektir.
GitHub Desktop – Terminal kullanmayı sevmiyorsanız arayüz istiyorsanız GitHub’ın kendine ait olan GitHub Desktop üzerinden yönetebilirsiniz.
Senaryoyu biraz ilerletelim. Diyelim ki arkadaşınızın projede değişiklik yaptı ve güncel projeye ihtiyacınız var. Bunun için tekrardan projeyi klonlamamıza gerek yok.
git pull
komutunu kullanarak güncel olarak yerelimizle eşitliyoruz. Böylelikle projenin en son halini görebilirsiniz. Kısaca bu komut GitHub üzerindeki değişiklikleri bulur ve bilgisayarınıza indirir.
Dikkat, proje üzerinde değişiklik yapmadan önce git pull komutu çalıştırmanız kod çakışmalarını yani conflict’i engeller. İleride bu konu üzerinde de duruyor olacağız. Son olarak kendi yerelinizde kaydetmediğiniz (commit) bir şeyi pull ile alamazsınız.
Tüm logları görebilmek için,
git log
komutunu kullanırız.

Her log’a ait bir ID bulunmaktadır. Author, commiti atan kişiyi belirtir. Date, ise işlemin ne zaman yapıldığını ve işleme ait mesajı göstermektedir.
4 – COMMIT ID
git show commitID
İlgili commit üzerinden hangi dosyaların, nasıl değiştiğini ve kim tarafından değiştirildiğine dair detaylı çıktı verir.

git diff commitID1 commitID2
İki commit arasındaki değişiklikleri görmek için kullanırız.
git diff commitID1 commitID2 file.txt
Sadece file.txt için değişiklikleri görmek için kullanırız.
git diff --name-only commitID1 commitID2
Detaylı kod farkları yerine sadece değişen dosyaların adlarını listeler.
git revert commitID
İlgili commit’e kadar geri alır. Tekrardan geri aldıklarımızı geri getirmek istersek geri aldığımız commit id ile geri getirebiliriz.
git reset -hard commitID
Belirttiğimiz commit ID’ye gider ve diğer commitleri siler. Geri almaz.
git commit --amend
Yapılan son değişiklikleri başka bir commit oluşturmadan en sondaki commite ekler.
git commit --amend -m "yeni mesaj"
Son commit mesajını değiştirir.
5 – BRANCH
Projemiz bir ağaç, branch ise bu projemizin dallarından bir tanesi demiştik. Branch, yeni bir özellik eklerken mevcut projemizi bozmamak adına önemli bir unsurdur. Bununla birlikte aynı anda birden fazla geliştiricinin ya da tek bir geliştiricinin farklı modüller üzerinde birbirini engellemeden çalışabilmesini sağlar.
git branch branch-ismi
‘branch-ismi’ adında bir branch oluşturur. Bu komut sadece branch oluşturur, branch geçişi sağlamaz.
git switch header
Daha önce oluşturulmuş ‘header’ adındaki branche geçiş sağlar. ! Eski versiyon git checkout
git switch -c header
‘header’ adında bir branch oluşturur ve direkt olarak ‘header’ adlı branch’e geçiş sağlar.
git branch
Mevcut tüm lokal branch’leri listeler. O an üzerinde bulunulan branch’in yanında * işareti yer alır.
git branch -d header
‘header’ isimli branchi siler. Aktif bulunduğunuz branch üzerindeyken silme işlemi yapamazsınız. İlk öncelikle farklı bir branch’e geçmenizde fayda var.
6 – MERGE
Bir branch üzerinde yenilikleri tamamladıktan ve test ettikten sonra, o daldaki kodları projemizin ana gövdesine (main) aktarmamız gerekir. Bu birleştirme işlemine merge denir. Merge işlemini gerçekleştirmeden önce üzerinde çalıştığınız kodları commit atmayı unutmayın.
İlk olarak branch’i ana gövdesine yani main ile birleştireceğimizden dolayı git switch main ile ilerliyoruz. Bu bilgi dahilinde,
git merge footer
‘main’ ana dalımızla, ‘footer’ isimli branch’imizi birleştirir.
! Birleşim olduktan sonra direkt olarak loglarda birleşir. Birleştirildiğine dair bir log tutmaz. Bu sebepten dolayı proje hakkında bilgi sahibi olmayanlar, birleşime dair bir log göremezler.
git merge --squash footer
Son commit hakkı verir. Bunun ardından;
git commit -m 'main ile footer merge edildi'
komutu ile commit atarız.
Merge Conflict
Farklı branch’lerde çalışırken, aynı dosyanın aynı satırlarında farklı değişiklikler yapıldıysa Git bu iki koddan hangisinin doğru olduğuna karar veremez. Bu durumda birleştirme işlemi yapılmaz ve Git size bir Merge Conflict (Çakışma) uyarısı verir.
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
git status komutu ile çakışma yaşanan dosyaları kırmızı renkli ve ‘both modified’ etiketi ile listeleme yapılır. Buradan kodlarınızı düzenleyerek tekrardan bir commit ile conflict uyarısını çözebilirsiniz.
7 – STASH
Stash, bir projemiz var ve branch’te işimiz daha bitmedi. Yaptığım değişiklikler gitsin istemiyorum ama commit atamıyorum çünkü tam olarak işim bitmedi. İşte, tam burada yardıma stash yetişiyor. Kısaca stash, yaptığımız değişiklikleri geçici olarak hafızada tutuyor.
git stash
Son committen bu yana yapılan değişiklikleri geçici olarak saklar ve git geçmişinde log olarak gözükmez.
git stash list
Geçici olarak saklanan stash kayıtlarını listeler.
git stash pop
Listenin en üstteki stash’i geri yükler ve bu kaydı listeden siler.
git stash apply stash@{3}
Belirtilen indeksteki kayıtı projeye uygular, seçilen kaydı listeden silmez.
git stash clear
Stash listesini temizler. Tüm kayıtlar kalıcı olarak siler.
Bu yazıda günlük yazılım geliştirme sürecinde en çok ihtiyacınız olacak temel Git ve GitHub komutlarını açıklamaya çalıştım. Bu süreçte hata yapmaktan çekinmeyin. Bazı şeyler hatalarla güzelleşiyor 🙂 Başka yazılarda görüşmek üzere.
