/* Yeni başlayan */ herkes için git

Git protokolünü kullanmak zordur. Ama deponuzu (repo) karıştırmak çok kolaydır. Ve bu karışıklıkları çözmek protokolün kendisinden de zordur. Bir nevi yumurta-tavuk ilişkisi var diyebiliriz.

Git, sanıyorum ki en sık kullandığımız versiyon kontrol protokolü. Git benzeri cvs, team foundation server, mercurial, svn (subversion) gibi versiyon kontrol protokolleri artık iyice gözden düşmüş durumdalar.

Git protokolünü kullanmak zordur. Ama deponuzu (repo) karıştırmak çok kolaydır. Ve bu karışıklıkları çözmek protokolün kendisinden de zordur. Bir nevi yumurta-tavuk ilişkisi var diyebiliriz.

Şimbi bu zorlu git komutlarında sıklıkla başınıza gelebilecek sorunları ve çözümlerini temiz bir türkçe ile açıklayalım. Bizim işimize çok yaradı, umarım diğer yazılımcı arkadaşların da işine yarar.

Sorun A: 

commit'imi az önce yaptım ama yeni bir değişiklik yapmam gerekti. Örneğin, ekibimin kod standardına uymalıyım ve eşittir işaretinin iki tarafına da birer boşluk koymam gerekiyor. 

Çözüm A: 
değişikliklerini gönül rahatlığı ile yap
git add . 
git commit --amend
karşına çıkan komutları takip ederek commit mesajını düzenle
🎉 taadaaa! artık son commit az önce yaptığın tüm değişiklikleri de barındırıyor


Sorun B:

son commit'imdeki mesajımı düzenlemem gerekti. belki bir yazım hatası yaptık belki de detaylardan birini yazmayı unuttuk.

Çözüm B: 
git commit --amend
karşına çıkan komutları takip ederek commit mesajını düzenle


Sorun C: 

yeni bir branch'e commit edeceğim yerde master'a commit'ledim. tabi eğer çoktan origin'e push'ladıysan ve kurtarmak için bir kaç komut denediysen işler daha karışmış olabilir. öyle bir durum varsa üzgünüz ama git reset HEAD@{sayı} komutunu yürütmen gerekecek.

Çözüm C: 
git checkout -b yep-yeni-bir-branch-yada-dal-ne-demek-istersen
git checkout master
git reset HEAD~ --hard
git checkout yep-yeni-bir-branch-yada-dal-ne-demek-istersen
🎉 taadaaa! son commit'in artık yeni branch de yer alıyor


Sorun D: 

dalgınlıkla yanlış bracnh'e commit yaptım.

Çözüm D:
git reset HEAD~ --soft
git add .
git stash
git checkout bu-sefer-dogru-branch-adi
git stash pop
git add .
git commit -m "sizi rencide ettiysem özür dilerim, vitelli"

Sorun E: 

bir diff çekip, kontrol edeyim dedim ama hiçbir şey olmadı. çünkü.. git, repo'ya eklenmeyen dosyalarda karşılaştırma yapmayı sevmez.

Çözüm E:
git diff --staged
🎉 taadaaa! tek bir parametre yetti bile.

Sonuç olarak pes edip, herşeyi yakmak isteyedebilirsiniz. Bunu için her zaman bilgisayarınızdaki klasörü son bit'ine kadar silip yeniden bir kopyasını oluşturabilirsiniz.
cd ..
sudo rm -r batsin-bu-dunya