Git nedir
Git, kısaca versiyon kontrol sistemidir. Bu söylemi açarsak; yazdığınız programı, kodu veya herhangi bir dosyalar topluluğunu, versiyonlara ayırarak ve iterasyonlar halinde geliştirmek istiyorsanız kullanacağınız sistem diyebiliriz.
Git yerel olarak, sizin bilgisayarınızda bulunan bir uygulamadır. Github ise Git ile yazılan projeler için bir depolama servisidir
Kurulum
Ben kurulumu Debian tabanlı sistemler için anlatacağım, ama küçük bir araştırma ile kolayca kendi işletim sisteminizdeki yükleme şeklini bulabilirsiniz
sudo apt install git
Kullanım
Eğer bir dizinde, git initialize ederek, local repository oluşturabiliriz. Bunu yaparken .git dizini de otomatik olarak oluşacaktır.
git init
Veya, halihazırdaki bir repository'i clone'layıp bilgisayarımıza indirmek istiyorsak:
git clone <link>
Örnek olarak
git clone https://github.com/limanmys/core
Not
git clone
ve Github üzerindeki Download butonu aynı şey değildir. Github üzerinden indirirseniz .git klasörü olmadığı için, geliştirmeye devam ederek commit veya push atamayız.
Bu noktada git credential'larımızı girmemiz gerekiyor
git config --global user.email "you@example.com"
git config --global user.name "YourName"
Add
Daha sonrasında, yerel çalışma ortamımızda yaptığımız değişiklikleri staging area dediğimiz yerel alana almak için:
git add .
Veya tek bir dosya, dizin vs. almak istiyorsak
git add dosya
git add dizin/
şeklinde kullanabiliriz. Bu işlem sonrasında bu değişiklikler bizim local repository'mize değil, sadece staging area içerisine kaydolmuş olur.
Not
git add
öncesinde ve sonrasında aşağıdaki komut ile, sırasıyla, öncesinde eklenmemiş dosyaları ve sonrasında ise eklemiş dosyaların durumunu görebilirsiniz
git status
Commit
Bunları local repository'e eklemek için:
git commit -m "commit mesajı"
Bunu yaptığımızda, kodumuz hala daha local repository'de bulunur.
Daha kolay anlayabilmeniz için bir görsel
Görsel git-scm.com'dan alınmıştır
Remote add
Bunu uzaktaki sunucumuza aktarmak için, önce sunucunun adresini aşağıdaki komut ile belirtmemiz gerekiyor(eğer clone'ladıktan sonra geliştirme yapıyorsanız buna gerek yoktur)
git remote add origin <link>
Burada origin ismi bizim kendi belirlediğimiz bir isimdir. İstediğiniz ismi koyabilirsiniz. Ama origin ismi genel kullanımdır ve tercih edilir.
Örnek olarak
git remote add origin https://github.com/limanmys/core
Push
Pushlamadan önce, eğer ana repo branchimiz main ise aşağıdaki komut ile yereldeki git üzerinden branch'i main yapabiliriz
git branch -M main
Daha sonrasında uzak depomuza bu değişiklikleri göndermek için
git push -u origin main
kullanılır. Buradaki main branch ismimizdir. Kullanımınıza göre değişiklik gösterir.
Not
Eğer -u parametresini kullanırsanız, uzaktaki branch ile yerel branch'inizi birbirine eşitleyerek
git pull origin main
yerine git pull
kullanarak işlem yapabilmenizi sağlar.
Bu komutu yazdığınızda, eğer ilk git kullanımınız ise, size Username ve Password soracaktır. Bu bilgileri girdiğinizde kodunuz uzaktaki sunucuya gitmiş olacaktır.
Not
Eğer Github hesabınızda Two Factor Authentication açıksa, şifre yerine Github üzerinden alacağınız bir tokeni, veya yerelde oluşturacağınız bir SSH anahtarını Github hesabınıza eklemeniz gerekir. Ben SSH anahtarı oluşturmayı öneriyorum.
Remote mantığını anlayabilmek için bir görsel daha
Görsel bu linkten alınmıştır
Pull
Bu noktadan sonra bizim dışımızda birinin yaptığı değişiklikleri yerel repomuza çekmek için
git pull origin main
veya -u parametresini kullandıysanız
git pull
komutunu kullanabilirsiniz. Dosyanızın yerel reponuza geldiğini göreceksiniz.
Fork
Github üzerinden forkladığımız repo'yu clone'layarak yerel repo oluşturabilirsiniz. Bu repo'nun origin'i kendi fork'unuzun ismi olacağı için, upstream, yani fork'ladığınız repo'nun remote olarak eklenmesi gerekir.
git remote add upstream https://github.com/<OriginalUser>/<OriginalRepo>
Not
upstream genel olarak tercih edilen isimdir.
Eğer fork'ladığınız repoda bir değişiklik varsa ve bunu kendi repo'nuz ile eşitlemek isterseniz
git fetch upstream
git checkout main
git merge upstream/main
Branch
Eğer farklı bir branch üzerinde çalışmak isterseniz
git checkout -b <branch_adı>
ile yeni branch'i oluşturup, o branch üzerinde çalışmaya başlayabilirsiniz. -b parametresi olmadan da halihazırda bulunan bir branch'e geçilebilir
git checkout main
Eğer yereldeki bir branchi silmek isterseniz
git branch -d <BranchName>
Stash
Eğer halihazırda bazı değişiklikler yaptıktan sonra, henüz push'lamadan, reponuzun herhangi bir branch'indeki değişiklikleri yerel reponuza uygulamak isterseniz
git stash
git pull
git stash pop
Commit Amend
Eğer son aldığınız commit mesajını değiştirmek isterseniz
git add .
git commit -amend -m "yeni commit mesajı"
kullanabilirsiniz.
Reset
Push'lamadığınız değişiklikleri geri almak için;
HEAD'e geri dönmek için(son remote commit veya son push)
git reset --hard HEAD
Not
Bu kısımlardaki komutlarda, --hard parametresi, değişikliklerinizin kaybolmasına yol açar. Eğer değişikliklerinizi kaybetmeden dönmek istiyorsanız, --soft parametresini kullanabilirsiniz
git reset --soft HEAD
git reset --hard HEAD~1 (bir önceki commit'e gitmek)
git reset --hard HEAD~2 (iki önceki commit'e gitmek)
Hard Reset Geri Alma
Hard reset geri almak için
git reset --hard HEAD@{1}
Revert
Eğer hard reset ile kaybedeceğiniz commit'leri kaybetmek istemiyor ve onların da commit geçmişinde bulunmasını istiyorsanız
git revert HEAD
Bu komut için hash kullanmanız da gerekebilir. Bunun için
git log
ile dönmek istediğimiz commit'in hash'ini bularak
git revert [hash]
Diff
Git'teki değişiklikleri görmek için
git diff
veya git add ile stage'lemişseniz
git diff --staged