Git ve Github Nedir, Nasıl Kullanılır

Rıdvan Tülemen - Jun 27 '21 - - Dev Community

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Veya, halihazırdaki bir repository'i clone'layıp bilgisayarımıza indirmek istiyorsak:

git clone <link>
Enter fullscreen mode Exit fullscreen mode

Örnek olarak

git clone https://github.com/limanmys/core
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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 .
Enter fullscreen mode Exit fullscreen mode

Veya tek bir dosya, dizin vs. almak istiyorsak

git add dosya
git add dizin/
Enter fullscreen mode Exit fullscreen mode

ş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
Enter fullscreen mode Exit fullscreen mode

Commit

Bunları local repository'e eklemek için:

git commit -m "commit mesajı"
Enter fullscreen mode Exit fullscreen mode

Bunu yaptığımızda, kodumuz hala daha local repository'de bulunur.

Daha kolay anlayabilmeniz için bir görsel
https://git-scm.com/about/staging-area
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>
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Daha sonrasında uzak depomuza bu değişiklikleri göndermek için

git push -u origin main
Enter fullscreen mode Exit fullscreen mode

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
image
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
Enter fullscreen mode Exit fullscreen mode

veya -u parametresini kullandıysanız

git pull
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Branch

Eğer farklı bir branch üzerinde çalışmak isterseniz

git checkout -b <branch_adı>
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Eğer yereldeki bir branchi silmek isterseniz

git branch -d <BranchName>
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Commit Amend

Eğer son aldığınız commit mesajını değiştirmek isterseniz

git add .
git commit -amend -m "yeni commit mesajı"
Enter fullscreen mode Exit fullscreen mode

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 
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode
git reset --hard HEAD~1     (bir önceki commit'e gitmek)

git reset --hard HEAD~2     (iki önceki commit'e gitmek)
Enter fullscreen mode Exit fullscreen mode

Hard Reset Geri Alma

Hard reset geri almak için

git reset --hard HEAD@{1}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Bu komut için hash kullanmanız da gerekebilir. Bunun için

git log
Enter fullscreen mode Exit fullscreen mode

ile dönmek istediğimiz commit'in hash'ini bularak

git revert [hash]
Enter fullscreen mode Exit fullscreen mode

Diff

Git'teki değişiklikleri görmek için

git diff
Enter fullscreen mode Exit fullscreen mode

veya git add ile stage'lemişseniz

git diff --staged
Enter fullscreen mode Exit fullscreen mode
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .