Git İpuçları

6 ay kadar çalıştığım Butigo‘da en iyi öğrendiğim şey git kullanımı olduğunu söyleyebilirim. git’i yeni yeni öğrenmeye başladığım zamanlarda git-cola kullanıyordum. Git’in inceliklerini bilmediğim için SVN‘den fazla bir farkı yoktu benim için. Butigo’da çalışmaya başladıktan sonra git’i her zaman konsoldan kullanmaya başladım, inceliklerini öğrendikçe git’in bir developer için vazgeçilmez bir nimet olduğunu gördüm.

Uzun zamandır yeni yazı yazmadığım bloğumda paylaşırım diye git hakkında not tutuyordum. Biraz boş zamanım varken aldığım notları paylaşayım dedim.


- Yapılan değişiklikleri silmeden son yapılan commiti silmek

Bir değişiklik yapıp yaptığınız değişikliği commit ettidiz(push etmediniz) fakat daha sonra committeki değişiklikleri silmeden sadece commiti silmek istiyorsunuz.

 $ git reset --soft HEAD~1

- Remoteda olup localde olmayan branchi indirip üzerinde çalışmaya başlamak

Birden fazla branch ile çalışıyorsunuz ve ev ve iş yerinizde ayrı makinaları kullanıyorsunuz. Akşam eve geldiniz ve iş yerinde oluşturduğunuz bir branch’i indirip üzerinde çalışmak istiyorsunuz

$ git fetch
$ git checkout -t origin/newFeature

- Remote branchi silmek

$ git push origin :newfeature

- Remotedan silinen fakat localde hala bulunan branchleri silmek

--dry-run parametresi ile silinecek branchlere bir göz atar sonrada silersiniz.

$ git remote prune origin --dry-run
$ git remote prune origin

- Son yapılan commit mesajını değiştirmek

$ git commit --amend

- Commit’e yeni değişikleri eklemek

Kodda değişiklikler yapıp commit ettiniz(remote’a henüz push etmediniz), daha sonra o commitle alakalı yeni bir değişiklik daha yaptınız. Bu yeni değişikliği yapmış olduğunuz commit’e eklemek istiyorsunuz. Bunu soft reset yapıp, değişikliği ekleyip yeniden commit edebilirsiniz ama okadar uğraşmaya gerek yok, kısa yolu var :)

$ git commit --amend -C HEAD

- Projeden silinmiş dosyaları index’e ekleme

Genelde projeden bir dosya/dizin silmek istediğimide git rm ile silmiyorum veyada aklıma gelmiyor, dizini açıp silmek istediklerimi seçip siliyorum. Böyle durumlarda silinen dosyaları git rm ile projeden de silmek gerekiyor. Bende pipe(|) ve xargs komutu yardımıyla silinen bütün dosyaları git rm komutuna yönlendirerek index’e ekleyorum.

$ git ls-files --deleted | xargs git rm

- Indexe eklenen değişiklikleri görmek

git add komutu ile indexe eklenmiş fakat henüz commit edilmemiş değişiklikleri görmek:

$ git diff --cached

Ayrıca stackoverflow’da da açıklayıcı bir cevap mevcut.

- Branchler arası diff

Üzerinde çalışılan branch ile başka bir branch arasındaki aynı dosya arasındaki farklılıkları görmek isteyebilirsin.

$ git diff master..develop settings.py

- Bir branch/commit’deki dosyanın içeriğini görmek

$ git show master:catalogue/models.py
$ git show 89e1a54:catalogue/models.py

- Bir branch/commit’deki dosyayı almak

$ git checkout master catalogue/models.py
$ git checkout 89e1a54 catalogue/models.py

- Push edilmemiş commitleri görmek

$ git log --branches --not --remotes

- git stash ile değişiklikleri kaydetmek/geri almak

Yeni bir özellik üzerinde çalışıyorsunuz ve proje yöneticiniz üzerinde çalıştığınız işi bırakıp acil düzeltilmesi gereken bir bug’ı çözmenizi istedi diyelim. Böyle durumlarda yapılan değişiklikleri stash edip bug’ı düzeltip commit edip daha sonra kaldığınız yerden devam edebilirsiniz.

- En son çalışılan branche hızlı geçiş

Konsolda cd - komutu ile en son ziyaret edilen dizine gidebiliyor. Bunun benzeri git’de de mevcut.

$ git checkout master
#Switched to branch 'master'
$ git checkout -
#Switched to branch 'develop'

- Local branch’i remote branch ile değiştirmek

Hard reset yaparken parametre olarak bir remote branch verilirse local branch’deki bütün değişiklikler index’e eklenen veya eklenmeyen değişiklikler ile beraber silinir yani local branch’iniz remote branch ile aynı olur.

$ git reset --hard origin/develop

- Belirtilen bir commit’den sonra yapılan bütün commitleri silmek

Birkaç tane commit yapar ve yaptığınız commitleri silmek isterseniz parametre olarak commit’in hashini vermeniz gerekir. Belirtilen commit’den sonra yapılan bütün commitler index’e eklenen veya eklenmeyen değişiklikler ile beraber silinecektir.

$ git reset --hard 5a2a9b5

Güzel bir kaç kaynak:

comments powered by Disqus