Git Notları
Git hakkında kısa ve öz online Türkçe kaynak oluşturmak amacıyla aldığım notlar.
- Versiyon: 1.0
- Yazar: Osman DURDAĞ
- Oluşturma: 13 Mart 2023
Herhangi bir sorunuz veya bu dökümantasyonu geliştirme öneriniz olursa lütfen aşağıdaki link aracılığıyla bana iletin 🙃
Git Notları
Versiyon Kontrol Sistemi (VCS) Nedir?
Belirli versiyonların daha sonra çağrılabilmesi için zaman içerisinde bir dosya veya dosya grubundaki değişiklikleri kaydeden bir sistemdir.
Neden VCS?
-
Birden fazla yazılımcının birbirlerinin değişikliklerinden etkilenmeden bir proje üzerinde çalışabilmesini sağlar.
-
Daha önce oluşturulmuş bir versiyona geri dönüş sağlar.
-
Versiyonlar arasında karşılaştırma yapabilmemizi sağlar.
En Yaygın Kullanılan Versiyon Kontrol Sistemleri
-
Git
-
CVS (Concurrent Version Sytems)
-
SVN (Apache Subversion)
-
Mercurial
-
Monotone
-
Bazaar
-
TFS (Team Foundation Server)
-
VSTS (Visual Studio Team Services)
-
Perforce Helix Core
-
IBM Rational ClearCase
Git, alışılmadık derecede zengin bir komut setine sahip, hızlı, ölçeklenebilir, dağıtılmış bir versiyon kontrol sistemidir.
Orijinal Dokümantasyona Ulaşmak İçin
Git-SCM
Kısa Tarihi
Linux çekirdek bakımının ilk yıllarında (1991 - 2002) yazılımdaki değişiklikler yamalar ve arşivlenmiş dosyalarla sağlanıyordu. 2002’de BitKeeper adında tescilli bir dağıtık versiyon kontrol sistemi kullanılmaya başlandı. 2005 yılında BitKeeper’ı geliştiren ticari şirket ile Linux çekirdeğini geliştiren topluluk arasındaki ilişki bozuldu.
Bu gelişme özellikle Linus Torvalds olmak üzere Linux geliştirme topluluğunu kendi versiyon kontrol sistemi araçlarını geliştirmeye sevk etti. Geliştirmiş oldukları sistemin hedeflerinden bazıları şunlardı:
-
Hız
-
Basit tasarım
-
Doğrusal olmayan geliştirme için güçlü destek (binlerce paralel şube)
-
Tamamen dağıtılmış
-
Linux çekirdeği gibi büyük projeleri verim bir şekilde yönetebilme (hız ve veri boyutu)
Neden Git?
-
İnanılmaz derecede hızlıdır
-
Büyük projelerde çok verimlidir
-
Doğrusal olmayan geliştirme için inanılmaz bir dallanma sistemine sahiptir
-
Çevrimdışı olarak kullanılabilmektedir
-
En çok kullanılan versiyon kontrol sistemlerinden birisidir (G2)
Kurulum
Aşağıdaki bağlantılar aracılığıyla işletim sistemine uygun git yükleme dosyası indirildikten sonra kurulum adımları tamamlanarak git kurulumu yapılır.
Not: Bu dokümantasyonda yalnızca Windows işletim sistemi için kurulum adımları anlatılacaktır.
Konfigürasyon
Git'i kurduğunuzda yapmanız gereken ilk şey, kullanıcı adınızı ve e-posta adresinizi ayarlamaktır. Her Git taahhüdü (tam olarak oluşturulmuş bir versiyon) bu bilgileri kullandığı için bu önemli bir adımdır.
-
$git config --global user.name "Kullanıcı Adı"
"Kullanıcı Adı" yerine kendi kullanıcı adınızı yazarak git için kullanıcı adınızı tanımlayabilirsiniz. Oluşturacağımız versiyonlar belirlediğiniz kullanıcı adı ile versiyonlanacaktır.
Örnek kullanım:
$git config --global user.name "zumrudu-anka"
-
$git config --global user.email «mail@mail.com"
"mail@mail.com" yerine kendi e-mail adresinizi yazarak git için e-mail adresinizi tanımlayabilirsiniz. Oluşturacağımız versiyonlar belirlediğiniz e-mail ile versiyonlanacaktır.
Örnek kullanım:
$git config --global user.email "osmandurdag@hotmail.com"
-
$git config --list
Bu komut yapılandırılmış ayarları listeleyecektir.
Yardım Alma
Git’i kullanırken yardıma ihtiyaç duyarsanız, Git komutlarından herhangi biri için kapsamlı bir kılavuz sayfasından yardım almanın üç yolu vardır:
-
$git help «parametre»
-
$git «parametre» --help
-
$git «parametre» -h
Bu komut yapılandırılmış ayarları listeleyecektir.
Örnek kullanım:
$git help add
$git add --help
$git add -h
Başlatma
Git deposu(repository) oluşturmak için mevcut olan 2 farklı yol vardır:
-
$git init
Komut satırını açtıktan sonra Git'i başlatmak istediğiniz proje dizininize gidip bu komutu çalıştırarak git'i projenize entegre edebilirsiniz.
-
$git clone «url» «dizin adı(opsiyonel)»
Git entegre edilmiş ve bulut sistemine kayıt edilmiş bir projeyi bu komut ile uzak bağlantı aracılığıyla bilgisayarınıza indirebilirsiniz.
Örnek Kullanım:
-
$git clone https://github.com/zumrudu-anka/zumrudu-anka.git
-
$git clone https://github.com/zumrudu-anka/zumrudu-anka.git githubProfilim
Bu ikinci kullanım örneğinde bulunulan dizinde githubProfilim adında bir klasör oluşturulacak ve indirilen dosyalar bu klasörün içine kayıt edilecektir.
-
Dosya Durumları
Git’in entegre edildiği bir proje dizinindeki bütün dosyalar genel olarak 2 durumda olabilir:
-
Untracked: Çalışma dizininizdeki son anlık görüntünüzde(commit) ve hazırlama alanınızda(staged) olmayan tüm dosyalardır.
Not: Bir depoyu ilk kez klonladığınızda, tüm dosyalarınız izleniyor(tracked) ve değiştirilmemiş(unmodified) durumdadır. -
Tracked: Son anlık görüntüdeki dosyalar(commit) ve yeni hazırlanan dosyalardır(staged). Kısacası, izlenen dosyalar Git'in bildiği dosyalardır.
İzlenen(Tracked) dosyalar ise 3 farklı durumda olabilir:
- Modified: Dosyayı değiştirdiğiniz ancak henüz veritabanınıza kaydetmediğiniz anlamına gelir.
- Staged: Bir sonraki kesinleştirme anlık görüntünüze(commit) gitmek için geçerli sürümünde değiştirilmiş bir dosyayı işaretlediğiniz anlamına gelir.
- Committed: Verilerin yerel veritabanınızda güvenli bir şekilde saklandığı anlamına gelir.

Yaygın Komutlar
Git çalışma dizininde yaygın kullanılan komutlar
git status
Çalışma dizininin durumunu kontrol etme
-
$git status
-
$git status -s
-s parametresi çalışma dizininin durumunu detaysız bir şekilde gösterir (kısa gösterim).
git add
Bu komut zaten izlenen dosyaları ve izlenmeyen dosyaları önce izlenen dosya durumuna getirerek staged bölgeye geçirir.
-
Staged Area:
Bir versiyon oluşturmak istediğimizde bunu iki adımda gerçekleştiririz. Versiyona dahil etmek istediğimiz dosya veya dizinleri önce Staged Area adındaki ara bölgeye alırız. Bu aşamada çalışma dizininin anlık görüntüsünü almış oluruz.
-
$git add «dosya-dizin adı»
Örnek Kullanım:
-
$git add README.md
-
$git add .
Burada .
değeri bulunduğumuz dizindeki tüm dosyalara işaret eder.
git commit
Staged bölgeye alınmış dosya ve dizinlerden gerçek anlamda bir versiyon oluşturma
-
$git commit -m "Commit Mesajı"
–m
parametresi versiyonla ilgili bilgi vermek için versiyon mesajı oluşturur. -
$git commit -a -m "Commit Mesajı"
–a
parametresi daha önce izlenmiş duruma alınmış dosya veya dizinleri tek satırda versiyona dahil eder. Bu komut dosyaları önce staged bölgeye alır daha sonra versiyonu oluşturur.
-
$git commit -m "Dokümantasyona git commit içeriği eklendi"
-
$git commit -a -m "Dokümantasyona git commit içeriği eklendi"
git log
Daha önce oluşturulmuş versiyonları listeleme
-
$git log
-
$git log -p
–p
parametresi daha sade(pretty) bir çıktı gösterir. -
$git log -«number»
–«number»
parametresi belirlenen sayıda versiyon(son versiyondan geriye) gösterir. -
$git log --pretty=format:"%h - %an, %ar : %s"
Komutu ile log komutunun pretty formatını ayarlayabiliriz. Yukarıdaki komut bu şekilde bir çıktı verecektir:
git log --pretty formatı için yararlı belirleyiciler
«hash» - «yazar adı», «ilişkisel yazar tarihi» : «commit mesajı»
-
%H:
Commit Hash -
%h:
Kısaltılmış Commit Hash -
%T:
Ağaç Hash (Tree Hash) -
%t:
Kısaltılmış Ağaç Hash -
%P:
Üst (Parent) Hash'ler -
%p:
Kısaltılmış Üst (Parent) Hash'ler -
%an:
Yazar Adı (Author Name) -
%ae:
Yazar Email'i (Author Email) -
%ad:
Yazar Tarihi (Author Date) -
%ar:
İlişkisel Yazar Tarihi (Author Relative Date) -
%cn:
Versiyonu Oluşturanın Adı (Committer Name) -
%ce:
Versiyonu Oluşturanın Email'i (Committer Email) -
%cd:
Versiyonu Oluşturanın Tarihi (Committer Date) -
%cr:
Versiyonu Oluşturanın İlişkisel Tarihi (Committer Relative Date) -
%s:
Konu - Özne - Versiyon Mesajı (Subject)
-
-
$git log -p -2
Son 2 commit'i pretty formatta gösterir
-
$git log -5
Son 5 commit'i gösterir
git diff
İki versiyon arasındaki değişiklikleri izleme
-
$git diff «hash»
«hash»
parametresinin yerine daha önce alınmış olan bir versiyonun hash değerini(hash değerinin soldan en az 7 karakterini kopyalamak yeterli) girerek o versiyondan itibaren yapılmış olan değişiklikleri izleyebiliriz. -
$git diff «hash» «hash»
Komutu ile belirli 2 versiyon arasındaki farkları inceleyebiliriz.
-
$git diff «hash»..«hash»
Komutu ile belirli 2 versiyon arasındaki farkları inceleyebiliriz. Önceki komut ile aynı işlevi görür.
-
$git diff --staged
--staged
parametresi staged bölgeye alınmış olan değişiklikleri izler. -
$git diff --cached
--cached
ve--staged
eş anlamlıdır.
Değişiklikleri Geri Almak
Erken commit yaptığınızda, bazı dosyaları eklemeyi unuttuğunuzda veya commit mesajınızı değiştirmek istediğinizde bu komut ile son commit'inizi değiştirebilirsiniz. Bu komut ile yapacağınız değişiklikler yeni bir commit oluşturmayacak, son commit'in yerini alacaktır.
Herhangi bir değişiklik yapmadan bu komutu çalıştırırsanız yalnızca son commit mesajınızı değiştirirsiniz.
-
$git commit --amend
Son commit mesajını değiştirmeniz için git için tanımlı varsayılan metin editörü açılır.
-
$git commit --amend -m "Commit Mesajı"
Önerilen kullanım. Son commit mesajını metin editörüne ihtiyaç duymadan tek satırda değiştirmenizi sağlar.
Son commit'inizi dosyalarda değişiklik yaparak güncellemek istediğinizde (geri almak istediğinizde) önce $git add
, daha sonra $git commit --amend
komutlarını kullanırsınız.
Örnek Kullanım:
-
$git add forgotten_file
-
$git commit --amend -m "Unutulan Dosya Eklendi"
Aşamalı Dosyanın Aşamasını Kaldırmak
Projenizde birden fazla dosya değiştirdiğinizi ve bunları staged bölgeye $git add *
komutu ile geçirdiğinizi varsayalım. Fakat sonradan farkettiniz ki bu dosyalardaki değişiklikleri ayrı ayrı commitlemek istiyorsunuz yani tüm değişikliklerin tek bir versiyon olarak yansımasını istemiyorsunuz. Bu durumda versiyona eklemek istemediğiniz dosyaları aşağıdaki komutlar aracılığıyla staged bölgeden çıkarabilirsiniz.
-
$git restore --staged «file»
Git versiyon 2.23.0'dan itibaren -
$git reset HEAD «file»
Not: $git status
komutu bu işlemin nasıl yapılacağına dair ipucu verir.
Örnek Kullanım:
-
$git restore --staged README.md
Yalnızca README.md dosyasını staged bölgeden çıkarır. -
$git reset HEAD README.md
Yalnızca README.md dosyasını staged bölgeden çıkarır. -
$git restore --staged .
veya$git restore --staged *
İçinde bulunduğumuz dizin ve alt dizinlerinde staged bölgeye eklenmiş bütün dosyaları staged bölgeden çıkarır. -
$git reset HEAD .
veya$git reset HEAD *
İçinde bulunduğumuz dizin ve alt dizinlerinde staged bölgeye eklenmiş bütün dosyaları staged bölgeden çıkarır.
Değiştirilmiş Dosyadaki Değişikliklerin Geri Alınması
Değiştirilmiş (modified) bir dosyayı son versiyonladığınız haline veya daha sonra versiyon oluşturmadıysanız ilk klonladığınız haline kolayca geri döndürmek istediğiniz durumlar olabilir. Yani projenizde bir dosyada değişiklikler yaptınız fakat bu değişiklikleri kaldırmak ve dosyanın son versiyondaki haline siz değişikliklerinizi tek tek arayıp geri almadan kolayca geri dönmesini istiyorsunuz. Aşağıdaki komutlarla bu işlemi kolayca yapabilirsiniz.
-
$git restore «file»
Git versiyon 2.23.0'dan itibaren -
$git checkout -- «file»
Not: $git status
komutu bu işlemin nasıl yapılacağına dair ipucu verir.
Örnek Kullanım:
-
$git restore README.md
Yalnızca README.md dosyasındaki değişiklikleri geri alır. -
$git checkout -- README.md
Yalnızca README.md dosyasındaki değişiklikleri geri alır. -
$git restore .
veya$git restore *
İçinde bulunduğumuz dizin ve alt dizinlerinde değiştirmiş olduğumuz bütün dosyaları en son versiyondaki hallerine geri çevirir. -
$git checkout -- .
veya$git checkout -- *
İçinde bulunduğumuz dizin ve alt dizinlerinde değiştirmiş olduğumuz bütün dosyaları en son versiyondaki hallerine geri çevirir.
Önemli: Bunun tehlikeli bir komut olabileceğini unutmayın. Bu dosyalarda yaptığınız tüm yerel değişiklikler kaybolacaktır. Kaydedilmemiş yerel değişikliklerinizi atmak istediğinizden emin değilseniz bu komutu çalıştırmamanız tavsiye edilir.
Uzak Bağlantılarla Çalışma
Git entegre edilmiş herhangi bir projede iş birliği yapabilmek için uzak depoların(repository) nasıl yönetileceğinin bilinmesi gereklidir. Uzak depolar, ilgili projenin Internet'te veya ağda bulunan sürümleridir. Aynı projede başkalarıyla işbirliği yapmak, bu uzak depoları yönetmeyi ve işi paylaşmak gerektiğinde bu depolara veri gönderip almayı içerir.
Uzak Bağlantıları Listeleme
-
$git remote
Daha önce oluşturulmuş uzak bağlantıları yalnızca kısa adları ile listeler. -
$git remote -v
Daha önce oluşturulmuş uzak bağlantıları okuma ve yazma sırasında kullancılacak URL'leri ile birlikte listeler.
Uzak Bağlantıları Ekleme
-
$git remote add «takma ad» «url»
Örnek Kullanım:
$git remote add gitlab https://gitlab.com/cnn4/yolo-object-detection.git
Uzak Bağlantıdan Veri Çekme
Uzak bağlantıdan veri çekmek için $git fetch «remote»
komutu kullanılabilir. Burada dikkat edilmesi gereken şey bu komutun $git pull
komutundan farklı olduğudur. $git pull
komutu uzak bağlantıdan çekilen verileri otomatik olarak ilgili branch ile birleştirirken (merge), $git fetch
komutu yalnızca veri çekecek, otomatik olarak birleştirme yapmayacaktır.
Örnek Kullanım:
-
$git fetch origin
Uzak Bağlantıya Veri Gönderme
Proje paylaşılmak istenen bir noktaya geldiğinde $git push «remote» «branch»
komutu kullanılabilir.
Örnek Kullanım:
-
$git push origin main
Uzak Bağlantıyı İnceleme
Bir uzak bağlantı hakkında daha fazla bilgi elde etmek için $git remote show «remote»
komutu kullanılabilir.
Örnek Kullanım:
-
$git remote show origin
Uzak Bağlantıyı Yeniden Adlandırma
Bir uzak bağlantının adını değiştirmek için $git remote rename «adı değiştirilecek branch» «yeni ad»
komutu kullanılabilir.
Örnek Kullanım:
-
$git remote rename origin root
Bu komut adı origin olan remote bağlantının adını root olarak değiştirir
Uzak Bağlantıyı Silme
Bir uzak bağlantıyı silmek için $git remote remove «remote»
veya $git remote rm «remote»
komutları kullanılabilir.
Örnek Kullanım:
-
$git remote rm root
Bu komut adı root olan remote bağlantıyı siler
Git Takma Adları
Git komutlarını tüm metinlerini yazmadan kendi kısaltmalarınızla kullanmak istiyorsanız $git config
aracılığıyla her komut için bir takma ad ayarlayabilirsiniz.
Bazı Örnekler:
-
$git config --global alias.co checkout
Bu ayarlamadan sonra checkout yerine co komutunu kullanabiliriz -
$git config --global alias.br branch
-
$git config --global alias.ci commit
-
$git config --global alias.st status
-
$git config --global alias.unstage 'reset HEAD --'
-
$git config --global alias.last 'log -1 HEAD'
.gitignore - Dosyaları Yok Saymak
Git entegre edilmiş proje veya çalışma dizininde izlenmesi istenmeyen dosyaların otomatik olarak izlenmeleri engellenebilir. Bu amaçla çalışma dizininde git tarafından tanınan .gitignore
adında özel bir dosya oluşturulur. Dosyanın adı git tarafından tanınması açısından önemlidir. İzlenmesi istenmeyen dosya ve dizinler bu dosyanın içine satır satır eklenerek git tarafından izlenmeleri ve versiyonlara dahil edilmeleri engellenebilir.
.gitignore
dosyası için tanımlı operatörler:
-
Yorum Satırları:
#
-
Olumsuzluğu Sağlamak:
!
-
Yinelemeyi Önlemek:
/dosya
-
Dizin Belirtmek:
dizin/
Örnek bir .gitignore
dosyasının içeriği:
