Git İpuçları
Jul 2, 2013 · 4 minute read · Commentsprogramminggit
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.
git stash
komutuyla değişiklikleri kaydedebilir,git stash list
ile stash’leri listeleyebilir,git stash pop
komutuyla en son kaydedilen stash’i geri alıp üzerinde çalışmaya devam edebilir,git stash show -p stash@{0}
gibi bir komutla stash’in içeriğine bakabilirsiniz(0 stash numarasıdır).git stash save <message>
ile ise stash’a bir açıklama ekleyebilirsiniz. Bu sayede daha sonra stash’leri listelediğinizde stash’in içeriğinin ne ile alakalı olduğunu kolayca hatırlayabilirsiniz.
- 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: