<-- home

Git Cheat Sheet

Index


Oluşturma


Var olan bir repositoryi(depoyu) klonlama:

$ git clone ssh://[email protected]/repo.git

Yeni bir yerel repository(depo) oluşturma:

$ git init

Yerel Değişiklikler


Çalışılan dizindeki dosyaların değişimi:

$ git status

İzlenen dosyalardaki değişiklikler:

$ git diff

Tüm güncel değişiklikleri sonraki commite ekleme:

$ git add

Sonraki commite <dosyasındaki> bazı değişikleri ekleme:

$ git add -p <file>

Tüm izlenen dosyalardaki yerel değişiklikleri commitleme:

$ git commit -a

Önceden hazırlanan değişiklikleri commitleme:

$ git commit

Mesaj ile commitleme:

$ git commit -m 'message here'

Önceki belli bir tarihe commitleme:

$ git commit --date="`date --date='n day ago'`" -am "Commit Message"

Son commiti değiştirme:
Yayınlanan commite değişiklik yapmayın!

$ git commit --amend

Mevcut branchteki kaydedilmemiş commitleri diğer bazı branchlere taşıma:

$ git stash
$ git checkout branch2
$ git stash pop

Arama


Bir metni dizindeki bütün dosyalarda aramak:

$ git grep "Merhaba"

Bir metni herhangi bir sürüm içinde aramak:

$ git grep "Merhaba" v2.5

Commit Geçmişi


Tüm commitleri en yenisinden başlayarak listeler:

$ git log

Tüm commitleri görüntüler(Sadece commit hash ve commit mesajı görüntülenir.):

$ git log --oneline

Belli kullanıcıya ait commitleri görüntüler:

$ git log --author="username"

Belirli bir dosya üzerinde zaman içinde meydana gelen değişiklikleri göstermektedir:

$ git log -p <file>

Dosyayı kim , ne ve ne zaman değiştirdiğini gösterir.:

$ git blame <file>

Branches & Tags


Tüm var olan branchleri listeler:

$ git branch

Ana branchi değiştirir:

$ git checkout <branch>

Mevcut ana branchte yeni bir branch oluşturur:

$ git branch <new-branch>

Remote branchte yeni bir izlenen branch oluşturur:

$ git branch --track <new-branch> <remote-branch>

Yerel branchi siler:

$ git branch -d <branch>

Güncel commiti etiket ile işaretler:

$ git tag <tag-name>

Güncelleştirme & Yayınlama


Yapılandırılmış tüm güncel remoteları listeler:

$ git remote -v

Belirli bir <remote> hakkında bilgileri gösterir.:

$ git remote show <remote>

Yeni remote repository oluşturur, <remote> diye isimlendirir:

$ git remote add <remote> <url>

<Remote> da bulunan tüm değişiklikleri indirir, ama ana brachle birleştirmez:

$ git fetch <remote>

Değişiklikleri indirir ve doğrudan ana brache merge/integrate eder:

$ git remote pull <remote> <url>

Tüm ana Branchteki değişiklikleri yerel repositorye ekler:

$ git pull origin master

Remote da bulunan repositorye(depoya), yerel değişiklikleri yayınlar:

$ git push remote <remote> <branch>

Remote da bulunan bir branchi siler:

$ git push <remote> :<branch> (since Git v1.5.0)

or

$ git push <remote> --delete <branch> (since Git v1.7.0)

Etiketleri yayınlar:

$ git push --tags

Merge & Rebase


Merge into your current HEAD:

$ git merge <branch>

Rebase your current HEAD onto <branch>:
Yayınlanan committen sonra rebase yapmayın!

$ git rebase <branch>

Rebase iptal etmek:

$ git rebase --abort

Çakışmaları çözümledikten sonra rebase devam etmek:

$ git rebase --continue

Çakışmaları çözmek için yapılandırılmış birleştirme aracını kullanmak:

$ git mergetool

Use your editor to manully solve conflicts and (after resolving) mark file as resolved:

$ git add <resolved-file>

$ git rm <resolved-file>

Geri Alma


Çalışılan dosyadaki tüm yerel değişiklikleri kaldırır:

$ git reset --hard HEAD

Evreleme alanı dışındaki tüm dosyaları alır(örnek: son git add’i geri alır):

$ git reset HEAD

Belli bir dosyadaki yerel değişiklikleri kaldırır:

$ git checkout HEAD <file>

Silinen dosyayı geri döndürme dosyanın commit loglarının tutuluyor olması ile mümkündür:

$ git revert <commit>

Reset your HEAD pointer to a previous commit and discard all changes since then:

$ git reset --hard <commit>

Reset your HEAD pointer to a previous commit and preserve all changes as unstaged changes:

$ git reset <commit>

Reset your HEAD pointer to a previous commit and preserve uncommitted local changes:

$ git reset --keep <commit>

Git-Flow


Index

Ayarlar


Git flow’u kullanabilmek için öncelikli olarak git kurulumunun yapılması gerekmektedir. Git flow OSX, Linux ve Windows üzerinde çalıştırılabilir.

OSX Homebrew:

$ brew install git-flow

OSX Macports:

$ port install git-flow

Linux:

$ apt-get install git-flow

Windows (Cygwin):


Git flow kurulumu için wget ve util-linux gerekmektedir.

$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash

Başlarken


Git flow, kullanmak istediğiniz projede ayarlarınızı özelleştirmek amacıyla başlatılır (initialize).

Başlangıç (Initialize): Bu noktada kafanızda dallarınızı (branches) isimlendirme konusuna ilişkin birçok soru işareti oluşacaktır. Bu bağlamda varsayılan (default) değerleri kullanmanız önerilir. git flow’u kullanmak istediğiniz reponuzdayken:

$ git flow init

Özellikler (Features)


Git flow ile yayınlamak üzere olduğunuz projenize ekleyeceğiniz özellikler için yeni dallarda (feature) kodlama yaparsınız. Genel olarak sadece geliştirici repolarında bulunurlar.

Yeni bir özellik eklemesi başlatmak (feature start): Yeni özelliklerin eklenmesi öncelikle develop dalından (branch) başlar.

$ git flow feature start MYFEATURE

Bu komut bize develop dalını (branch) temel alan bir özellik dalı (feature) oluşturur. Ve bulunduğumuz dalı develop/MYFEATURE olarak değiştirir.

Bir özellik eklemesi bitirilirken (feature finish): Bir özelliğin eklenme işlemi bitirilirken şunları yapılır:

  • Kendi çalıştığımız özellik dalı (burada MYFEATURE) develop ana dalı ile birleştirilir.
  • Bu birleşmeden sonra kendi özellik dalımız (MYFEATURE) silinir.
  • Bulunduğumuz dal tekrar develop olarak değiştirilir.
$ git flow feature finish MYFEATURE

Bir özelliği yayınlamak (Publish a feature): Bir ekip içerisinde geliştirme mi yapıyorsunuz? O zaman geliştirdiğiniz özelliği bir uzak sunucuya gönderin, böylelikle geliştirdiğiniz özellik diğer kullanıcılar tarafından kullanılabilir.

$ git flow feature publish MYFEATURE

Yayınlanmış bir özelliği almak (Getting a published feature): Uzak sunucu üzerinde yayınlanmış bir özelliği kendi yerel (local) çalışma ortamınıza aktarırken:

$ git flow feature pull origin MYFEATURE

Bir Yayın Çıkarırken (Release)


Yeni bir ürünün yayınlanmasına yardımcı olur. Küçük hata giderimleri ve meta-data hazırlığı için kullanılabilir.

Bir sürüm yayınlamak (Start a release): Bu komut ile develop dalını temel kabul eden bir release dalı (branch) yaratılır. Opsiyonel olarak yayınınızın [BASE] noktasından başlamasını sağlayabilirsiniz. Bu commit develop dalında (branch) iken yapılmalıdır.

$ git flow release start RELEASE [BASE]

Yayınlama dalınız (release branch) oluştuktan sonra bu yöntem ile diğer yazılımcılar tarafından yapılan release commitlerinin de kabul edilmesini sağlayabilirsiniz. Bunu özellik yayınlama (feature publishing) ile kolaylıkla yapabilirsiniz.

$ git flow release publish RELEASE

(Uzak sunucu üzerindeki yayınları git flow release track RELEASE ile izleyebilirsiniz. )

Bir sürüm yayınını tamamlamak(Finish up a release): Bir sürüm yayınını tamamlarken git dallanmasının (branching) en büyük adımını atarız. Yayınlanma tamamlanırken:

  • Yayınlama yaptığımız dal olan release dalı (branch) master ana dalı ile birleştirilir.
  • Etiketler (tags) isimleri ile birlikte yayınlanır.
  • Arkaplandaki birleştirmeler (back-merges) develop dalında yayınlanır.
  • Yayınlama için açmış olduğumuz dal (branch) silinir.
$ git flow release finish RELEASE

Ancak etiketlerinizi de eklemeyi unutmayın! git push --tags bu sorununuzu da halledecektir.

Hata giderimleri (Hotfixes)


Yayına çıkarılmış bir versiyonda istenmeyen durumlar ortaya çıktığında ani hata giderimi için kullanılır. Hotfixler, master ana dalı (branch)ındaki versiyon numarasını belirten etiketten dallanır (branching).

Bir hata giderimini başlatmak(git flow hotfix start): Diğer git flow komutlarında olduğu gibi bir hotfix başlatılırken

$ git flow hotfix start VERSION [BASENAME]

Versiyon argümanları yeni hotfix yayınının adını alır. Opsiyonel olarak başlangıç noktası için bir isim özelleştirmesi yapabilirsiniz (basename).

Hata giderimi bitirme (Finish a hotfix): Bir hata giderimi tamamlanırken, develop ve master dalları ile birleştirilir. Ayrıca master dalına (branch) hotfix versiyonunun etiketi eklenir.

$ git flow hotfix finish VERSION

Komutlar (Commands)


Git

Kaynak: Git Cheat Sheet