Git ile düzenli olarak çalışan geliştiriciler için geçmişi değiştirmek çok yaygındır. Aslında geliştiricilerin genellikle Git geçmişinden taahhütleri kaldırması gerekir. Neyse ki Git bu işlemi mümkün kılmak için birçok komut sağlıyor.
Gelelim konuya 😎.
Adım 0 - Hazırlık
Git geçmişini değiştirmeden önce git status komutunu kullanarak çalışma dizininizin herhangi bir değişiklikten temiz olduğundan emin olun.
Adım 1 – Taahhütleri yerel olarak silin
Uzak bir sunucudaki taahhütleri silmek için öncelikle bunları yerel geçmişinizden kaldırmanız gerekir.
1.1 Üstten ardışık taahhütler için
Kaldırmak istediğiniz taahhütler taahhüt geçmişinizin en üstüne yerleştirilmişse, HEAD
nesnesi ve kaldırmak istediğiniz taahhütlerin sayısıyla birlikte git reset --hard
komutunu kullanın.
git reset --hard HEAD~1
Bu komut en son taahhüdü kaldıracaktır.
git reset --hard HEAD~3
Bu komut son üç işlemi kaldıracaktır.
Ayrıca, bir taahhüdün karmasını kullanarak belirli bir taahhüdü kaldırabilirsiniz:
git reset --hard <hash>
1.2 Ardışık olmayan taahhütler için
Ancak ardışık olmayan taahhütleri kaldırmak istiyorsanız etkileşimli bir yeniden taban kullanmanız gerekir.
- [ ]
git reflog
komutunu kullanarak kaldırmak istediğiniz tüm taahhütleri içeren son taahhüt karmasını bulun. - [ ]
git rebase -i <hash>
ile etkileşimli bir yeniden temel başlatın. - [ ] Düzenleme ekranında kaldırmak istediğiniz taahhüt satırlarını bulun ve kaldırın.
- [ ] Kaydet ve çık (çatışmaları çözmeniz gerekebilir)
- [ ] Etkileşimli yeniden tabanı
git rebase --continue
ile sonlandırın veya rebase'i iptal ederek baştan başlayın.
Adım 2 - Uzaktan kumandadan taahhütleri silin
Taahhütleri uzaktan silmek için, yerel değişikliklerinizi git Push komutunu kullanarak uzaktan kumandaya aktarmanız gerekir.
git push origin HEAD --force
Yerel geçmişiniz uzak geçmişten farklı olduğu için force
seçeneğini kullanmanız gerekir.
Son düşünceler
Gördüğünüz gibi Git uzak bir sunucudaki taahhütlerin silinmesini kolaylaştırıyor.
Ancak git push
komutunu force
seçeneğiyle birlikte kullanırken dikkatli olmanız gerekir çünkü dikkatli olmazsanız ilerlemeyi kaybedebilirsiniz.
Okuduğunuz için teşekkürler!