Git Stash

Firefox ile kullandığım bir tema var Firefox Gnome Theme adında ve bu temayı ara ara git pull komutu ile uzak depodan güncelliyorum son değişikliklere sahip olmak için. Sorun şu ki bu tema orjinal halinden bir miktar uzaklaştı çünkü yerelde yaptığım kendi değişikliklerim var. Haliye bunu güncellerken git “Please, commit your changes or stash them before you can merge. (Birleştirme yapabilmek için değişikliklerinizi işleyin ya da zulalayın)” şeklinde bir uyarı veriyor.

Daha önce de bir çok kez bu sorunla karşılaştım fakat öğrenmek yerine uzun yoldan sorunu çözmeye kalkışmıştım her seferinde ama artık yeter. Meğer iş oldukça basitmiş.

Önümüzde bir kaç seçenek var;

  1. Yerelde yaptığımız değişiklikleri önemsemeyip direkt üzerine yazabiliriz.
  2. Yerelde yaptığımız değişiklikleri tutup uzak depodaki değişiklikleri çektikten sonra kendi değişikliklerimizi üzerine ekleyebiliriz.
  3. Uzak depodaki değişiklikleri indirebiliriz fakat uygulamayabiliriz.

Yerel Değişiklikler Önemli Değilse 🔗

Bu durumda yerelde yaptığımız tüm değişiklikleri sıfırlayıp dalı ilk haline çevirebiliriz. Böylelikle git merge komutunu sorunsuz bir şekilde çalıştırabiliriz.

git fetch
git reset --hard HEAD
git merge origin/$MEVCUT_DAL

Eğer her seferinde dal adını yazmak istemiyorsak geçerli dalı işaret eden @{u} kısayolunu kullanabiliriz.

git fetch
git reset --hard HEAD
git merge '@{u}'

Yerel Değişiklikler Önemliyse 🔗

Yaptığımız değişiklikler önemliyse iki seçeneğimiz var commit ve stash; yani ya değişiklikleri işleyeceğiz ya da zulalayacağız.

Zulalamak, değişiklikleri bir süreliğine rafa kaldırmak anlamına geliyor.

git fetch
git stash
git merge '@{u}'
git stash pop

git stash komutu değişikliklerimizi geçici süreliğine kaydedip uzaklaştırmak için kullanılıyor. Birleştirme işlemini yaptıktan sonra da git stash pop ile yaptığımız değişikleri tekrar ekliyoruz ve geçici olarak yaptığımız kaydı da silmiş oluyoruz.

Sadece Uzaktaki Değişiklikleri İndirmek İstiyorsanız 🔗

Bu son seçeneğe hiçbir zaman ihtiyacım olur mu bilmiyorum. Bunu daha çok karışık bir düzenleme işlemi içindeysek ve sadece uzaktaki değişiklikler ile mevcut değişiklikler arasındaki farklılıkları görmek için git diff komutunu çalıştırmak istediğimizde kullanıyoruz (öyle diyorlar). Yani uzaktaki son durum elimizin altında oluyor fakat yerele bir etkisi olmuyor.

Bunun için tek ihtiyacımız olan git fetch --all ve eğer uzakta bazı dallar silinmişse ve yerelde de silinsin istiyorsanız git fetch --all --prune komutunu kullanabilirsiniz.