GIT Temel Komutları

git init

Henüz versiyon kontrolü altında olmayan bir projenin dizininde, boş bir git deposu oluşturmak için kullanılır.

git config

GIT’in bir çok konfigürasyon ve ayarı vardır, bunlardan ikisi user.name ve user.email olanıdır. Bu ayarları yapılandırmak için aşağıdaki komutları kullanırız. GIT'i ilk kurduğumuzda genellikle aldığımız ilk hata bu configurasyon ayarlarını yapmadığımız için gelir. Burada yazdığınız isim ve email ileride GitHub benzeri bir plat forma commit attığınızda da görüneceği için bunu bilerek isimlendirme yapmak yararlı olur. Ayrıca görüldüğü gibi bu ayarlar --global yani sistem genelinde geçerli ayarlardır. Proje bazlı bu ayarları değiştirebiliriz.
$ git config --global user.name "Name Surname"
$ git config --global user.email "test@email.com"

Bu ayarların bütününü görüntülemek için:
$ git config --list
Not: Eğer windows işletim sistemi kullanıyorsanız, böyle bir hata ile karşılaşabilirsiniz.
warning: LF will be replaced by CRLF in kaynak/dosya/yolu
Bu hatanın çözümü için aşağıdaki komutu kullanabilirsiniz.
$ git config core.autocrlf true

git add

Yeni eklenen veya üzerinde değişiklik yapılan dosyaları staged ortamına göndermek için kullanılır.
$ git add dosya veya klasor_name
projedeki tüm dosyaları eklemek için:
$ git add .

git rm

Staged ortamına eklenmiş bir dosyanın takibinin bırakılması yani untracked (izlenmeyen) hale getirilmesi sağlayan komuttur. $ git rm --cached dosya veya klasor_name Dosyayı klasörden silmek istiyorsak eğer, aşağıdaki komutu kullanılırız. $ git rm dosya veya klasor_name

git status

git status üzerinde çalışılan projenin o anki durumu hakkında bilgi verir. Yapılan değişiklikler, eklenen ve silinen dosyalar gibi bilgiler listelenir.
$ git status

git commit

Commit, staged ortamına alınan dosyaların Local Repository’e gönderilmesidir. En iyi uygulama yöntemi her kayıt sırasında yapılan değişiklikleri açıklayıcı bir mesaj eklemektir. Ayrıca her commit benzersiz bir kimliğe (unique ID) sahip olur. Bu sayede eski bir commit'e geri dönebilirsiniz ve herhangi bir kayıp yaşama ihtimaliniz kalmaz.
$ git commit -m "ilk commit mesajı"
Buradaki -m (message) mesaj anlamındadır.

git log

Projedeki commit geçmişini görüntülememizi sağlar. Bütün commit'ler, id'si, yazarı, tarihi ve mesajı ile beraber listelenir. $ git log

git branch

Local veya remote repository üzerinde yeni bir branch (dal) eklemek, silmek veya listelemek için kullanılır.
Projenize yeni bir branch eklemek için;
$ git branch branch_name
*Tüm uzak ve yerel branch'lari listelemek için; $ git branch -a
Bir branch'ı silmek için; $ git branch -d branch_name

git checkout

Branch’ler arası veya commit'ler arası geçiş yapmak istediğimizde kullanılır.
Mevcutta var olan branch'a geçiş yapmak için;
$ git checkout branch_name
Yeni bir branch oluşturup, bu branch'a geçiş yapmak için;
$ git checkout -b branch_name
Commitler arası geçiş yapmak için: (Eski bir versiyona dönmek istediğimiz zaman)
$ git checkout commit_ID

git merge

Başka bir branch'da olan değişiklikleri, bulunduğumuz branch ile birleştirmek istediğimizde kullanılır.
$ git merge <branch_name>

git clone

Mevcut bir Remote Repository'de bulunan dosyaların bilgisayarımızda bir kopyasının oluşturulmasını sağlar.
$ git clone <remote_URL>

git push

Projemizde aldığımız commit'leri, remote repository'e gönderir.
$ git push origin master
Burada bahsi geçen origin remote repository’nin kök dizinini belirtir ve sabit bir isimdir. master ise sizin çalıştığınız branch (dal)’ı belirtir.
Henüz remote repository’niz yoksa aşağıdaki komut ile local deponuzu uzak sunucudaki depoya bağlayabilirsiniz.
$ git remote add origin http://uzak_deponun_adresi.git

git diff

Repository üzerinde yapılan değişikliklerden sonra dosyalar arasında oluşan farklılıkları göterir.
Çalışma dizini ile repository (HEAD) arasındaki farklılıkları görmek için:
$ git diff HEAD
İki commit arasındaki farklılıkları görmek için:
$ git diff <commit_id_1>..<commit_id_2>
Çalışma dizini ve staged ortamı arasındaki farkları görmek için:
$ git diff --staged

.gitignore Dosyası Ne İşe Yarar? Nasıl Kullanırız?

.gitignore Dosyası Ne İşe Yarar? Nasıl Kullanırız?

local çalışma alanındaki takip edilmesini istemediğin, takım arkadaşların için gerekmeyen dosyaların varsa veya bu dosyaların boyutu reponuza atmanıza gerek olmayacak kadar büyük ölçekli ise .gitignore dosyası içinde belirtilir

.gitignore içinde belirtilenler lokal veya online yedeklenmez.

Nasıl oluşturulur?

VSC içinde yeni dosya denilip adı .gitignore olarak yazılır.
Terminelde:
$ echo some-text or nothing > .gitignore

Nasıl çalışır, nasıl kullanılmalı?

her satırına takip edilmesini istemediğimiz dosyaları veya dizinleri yazarak göz ardı edebiliriz.
Tabii bu dosyaları yazarken bize kolaylık sağlayan bazı formatlar var. İşte onlar:
*.idea uzantısı idea olanlar izlenmez
logo.jpg adı logo.jpg olan dosyay izlenmez
img/ img isimli klasör izlenmez
!files/example.txt files klasöründe example.txt dışındakiler izlenmez
Daha öncesinde `files` klasörü `.gitignore` dosyasına eklenmişse sonrasında ise `!` içerisindeki dosya ile işlem yapmak işe yaramayacaktır.

daha önce git e eklenmiş bir dosya .gitignore dosyasına yazılsa da git edilmeye devam eder. Bu durumu düzeltmek için:
$ git rm --cached FILENAME

global .gitignore

Belli dosyalarımı her seferinde .gitignore dosyasına eklememek bunu tek seferde halletmek için:
Windows kullanıcısı iseniz C:\Users\{myusername}\ adresine giderek .gitignore_global dosyası oluşturup içerisine global olmasını istediğiniz dosyaları ekledikten sonra git bash terminalinizi açarak aşağıdakı komut ile konfigürasyon sağlayabilirsiniz. $ git config --global core.excludesfile "%USERPROFILE%\.gitignore"
Dosyanızın doğru çalıştığını kontrol etmek için ise aşağıdaki komutu çalıştırarak aşağıdaki çıktıyı aldığınızda sorunsuz çalıştırabilmişsinizdir. (Aşağıdaki kodu kopyala yapıştır yapmadan önce kullanıcı adını değiştirin.)
$ git config --global core.excludesfile > C:/Users/user-name/.gitignore_global

Kullandığımız yazılım diline uygun hazır git ignore dosyalari için tıklayınız

GitHub'a Projemizin Eklenmesi

github üyeliği alınır ve yeni repo açılır.

git init ile lokal boş repo oluşturulur.
git add dosya_adi ile versiyon kontrolü yapılacak dosyalar eklenir.
git commit -m "ilk yorum" ile veri lokal repoya gönderilir. git branch -M main ile main isimli branch oluşturulur. git remote add origin 'repo-link' ile online repo yeri tanıtılır. git push -u origin main ile hazırlana dosyalar online repoya gönderilir.

Commit, Diff, Log, Amend

Mevcut commit içine bilgi eklemek

git add ile dosyalar eklenir.
git commit --amend ile bir önceki commit içine değişiklikler eklendi
git commit --amend -m "bu mesaj amend ile eklendi" ile önceki commitin mesajı değiştirildi.
git revert "commitID" commitID en az ilk yedi rakam ile yazılırsa o commit silinir ve silinen commit son commit ise dosyalardaki değişiklikler geri alınır. git log ile açılan commit listesinde silinen commit için revert commit açılır.
gir reset --hard "commitID" commitID en az ilk yedi rakam ile yazılırsa o commite kadar olan tüm commitler silinir. log dan da silinir.
git diff eskiCommitID..dahaYeniCommitID dosyaAdi ile dosyaAdi dosyasında eskiCommit ten dahaYeniCommit e kadar olan değişiklikler gösterilir.
Örnek: git diff 5a754111..dbae00da index.html
git diff eskiCommitID..dahaYeniCommitID ile de genel olarak commitler arası değişiklikler görülebilir

Branch İşlemleri ve Stash Kavramı

Branch

Bir ekip ile beraber çalışıyorsanız sizden beklenen değişiklikleri oluşturacağınız yeni bir branch (dal) üzerinde yaparsınız. Daha sonrasında bu oluşturduğunuz branch’ i ana branch olan master ile birleştirirsiniz.

git branch bu repoda varolan branchleri gösterir.
git branch branchAdi branchAdi adında bir branch oluşturur ama mevcut branchde kalmaya devam eder.
git checkout branchAdi branchAdi adındaki branche geçer.
git checkout -b branchAdi branchAdi adında branch oluşturup ona geçer.
git branch -D branchAdi branchAdi adındaki branchi siler

Stash

Bazen Commit işlemi yaptıktan sonra yüzlerce satır komut yazarsınız. Sonra birden yazdığınız kodlardan önceki versiyon üzerinde değişiklik yapmanız gerekebilir. Bu durumda bu yazdığınız komutları bir yere saklamanız gerekir. İşte bu tarz senaryolarda git stash bizi çok önemli bir sorundan kurtarıyor.

git stash son committen itibaren yapmış olduğumuz tüm değişiklikler geçici olarak stashte saklanır.
git stash list stashler listelenir.
git stash clear stashleri siler.
git stash pop stashteki verileri ekler ve stash silinir
git stash apply "stashID" stashIDdeki veriyi ekler. Stash silinmez.

Merge, Rebase, Conflict

Merge

git merge "eklenecekBranch" mevcut branch içine eklenecekBranch eklenir. Bunu için her iki dalın ortak commiti sistem tarafından bulunur. her iki banchin son comitindeki değişiklikleri aktif olan branche uygular. "eklenecekBranch" commitlerini loga taşır.
git merge --squash "eklenecekBranch" işlem sonrasında commit yapılmasına izin verir. Bu sayede mesaj yazılabilir. "eklenecekBranch" commitlerini loga taşımaz.

Rebase

git rebase "eklenecekBranch" "eklenecekBranch" eklenir. commitler de loga eklenir. logda merge görünmez.

Conflict

Aynı dosya içinde farklı branclerde değişiklik yapıldıysa merge işleminde çakışma hatası verir. Bu durmuda VSC her iki veriyi de gösterip karar vermeni ister.
git merge --abort kesişim yaşanan merge işlemi iptal edilir.