Kurs
Bir grup kodlama projesinde çalıştıysanız, bir değişikliği geri almaya çalışırken işlerin ne kadar hızlı ters gidebileceğini biliyorsunuzdur. Tek bir yanlış hamleyle kendi çalışmalarınızı silebilir, hatta daha kötüsü: ekip arkadaşınızın az önce ittiği bir şeyi bozabilirsiniz.
Bu yüzden Git'in hataları geri almak için sunduklarını ve her seçeneğin ne zaman kullanılacağını anlamak çok önemlidir. Bazı komutlar ekip ortamları için güvenliyken, bazıları yerel temizlik için, geçmişi yeniden yazmada sakınca görmediğiniz durumlar için daha uygundur.
Bu kılavuz sizi tüm adımlarda yönlendirecek. Commit'leri geri almanın farklı yollarını, nasıl çalıştıklarını ve duruma göre hangisini seçmeniz gerektiğini öğreneceksiniz.
Git Commit Geçmişini Anlamak
Hiç bir belge sürümünü kaydetmek için 'Ctrl+S' tuşlarına basıp sonra geri döndünüz mü? Git commit tam olarak bunu yapar, ama tüm kod tabanınız için.
Git'te commit nedir?
Bir git commit, projenizin belirli bir andaki anlık görüntüsüdür. Tüm dosyalarınızın mevcut durumunu dondurur ve bu sürüme benzersiz bir kimlik atar; tıpkı kodunuzun zaman damgalı bir fotoğrafını çekmek gibi. Daha sonra bir şey bozulursa her zaman o noktaya geri dönebilirsiniz.
Nasıl çalışır? Depodaki bir dosyayı değiştirdiğinizde, değişiklikler hemen saklanmaz. Bunun yerine, yerel olarak geçerli çalışma dizininizde bulunurlar. Bunları kaydetmek için değişiklikler önce sahnelenir, ardından depoya commit edilir. Commit geçmişiniz, bir depoda gerçekleştirilen tüm commit'lerin günlüğüdür.
Yerel ve uzak commit'ler
Yerel commit'ler makinenizde kalır ve siz paylaşmaya karar verene kadar çalışma arkadaşlarınız veya işbirlikçileriniz tarafından görülemez. Bu da onlar üzerinde daha fazla kontrolünüz olduğu anlamına gelir: geçmişi yeniden yazabilir, birleştirebilir (squash), silebilir veya sıfırlayabilirsiniz; kimseyi etkilemez.
Uzak commit'ler ise depoda çalışan herkes tarafından erişilebilir. Bu, bu commit'leri yeniden yazmamanız veya silmemeniz gerektiği anlamına gelir. Bunu yapmak, aynı uzak dalı kullanan ekip arkadaşlarınız için sorunlara yol açar. Bu nedenle, paylaşılan geçmişi yeniden yazmadan önce ne yaptığınız konusunda dikkatli ve farkında olmalısınız.
Son Git Commit'ini Yerelde Geri Alma
Git'te HEAD, projenizin geçmişindeki en son commit'i işaret eder. git reset komutunu kullandığınızda, Git'e bu işaretçiyi farklı bir commit'e taşımayı söylersiniz.
Farklı senaryolarda son commit'i geri almak için git reset nasıl kullanılır, bunu adım adım inceleyelim.
git reset --soft HEAD~1 kullanma
HEAD'i bir commit geri taşır ancak değişikliklerinizi hazırlama alanında (staging area) bırakır. Dosyalarınıza dokunulmaz ve commit ettiğiniz her şey hâlâ sahnede bekler. Bunu, yalnızca commit'in kendisini geri almak, ancak tüm değişiklikleri hazır ve sahnelenmiş halde tutmak istediğinizde kullanın.
git reset --mixed HEAD~1 kullanma
Bu bir adım daha ileri gider. Ayrıca HEAD'i bir commit geri taşır ancak hazırlama alanını temizler. Dosyalarınız hâlâ çalışma dizininizde durur, ancak hiçbir şey artık sahnelenmiş değildir. Bu, git reset için varsayılan moddur.
git reset --head HEAD~1 kullanma
HEAD'i geri taşır, hazırlama alanını temizler ve çalışma dizininizdeki değişiklikleri siler. Sanki son commit (ve onunla birlikte tüm değişiklikler) hiç olmamış gibidir.
Dikkatli kullanın — bu değişiklikler bir kez silindi mi geri getirmek zordur. Bu yüzden, son commit'ten hiçbir şeye ihtiyacınız olmadığından kesinlikle emin değilseniz çalıştırın.
Örnek 1: Son commit'i yerelde geri alma (güvenli yeniden çalışma)
Diyelim ki az önce bir commit yaptınız, ancak README dosyasını güncellemeyi unuttuğunuzu fark ettiniz.
Senaryo:
main.py dosyasına değişiklikleri commit ettiniz, ancak README.md'yi güncellemeyi unuttunuz. Başkasını etkilemeden son commit'i düzeltmek istiyorsunuz ve henüz hiçbir şeyi itmediniz.
Çözüm:
Commit'i geri almak ve değişikliklerinizi sahnede tutmak için git reset --soft HEAD~1 kullanın:
git reset --soft HEAD~1
Şimdi README dosyanızı güncelleyin, sahneye ekleyin ve her şeyi yeniden commit edin:
git add README.md
git commit -m "Update main.py and README.md"
✅ Neden işe yarar: Commit henüz itilmediğinden, yerel geçmişi kimseyi etkilemeden yeniden yazabilirsiniz.
İtilmiş Bir Git Commit'ini Geri Alma
Bir commit'i itiniz... ve şimdi pişmansınız. Hepimizin başına geldi. Peki ekip arkadaşlarınızın çalışmalarını bozmadan bunu nasıl geri alırsınız?
git push --force ile geçmişi yeniden yazmak
Normalde Git, yalnızca yerel dalınız yakın zamanda çekilmiş ve uzak dal ile güncel ise itmenize izin verir. Ancak push --force gibi süper güçlü bir komutla bu kuralı geçersiz kılabilirsiniz. Uzak depodaki tüm geçmişi yerel dalınızdakiyle üzerine yazar.
Bu yüzden --force güçlü ama tehlikelidir. Bir ekip ortamında, eğer commit'ler yerel dalınıza çekilmemişse, çalışma arkadaşlarınızın commit'lerini silebilir. Yalnızca ne yaptığınızdan tamamen emin olduğunuzda — ve ideal olarak, o depoda tek başınıza çalışıyorsanız — kullanın.
push --force dışında, dikkatli kullanılması gereken bir diğer güçlü komut da pull --force'tur. Buradan öğrenin.
git revert kullanarak daha güvenli alternatifler
Bir commit'i geçmişi silmeden geri almak istiyorsanız, git revert en iyi seçenektir. Commit'i kaldırmaz; değişiklikleri geri alan yeni bir commit oluşturur.
Diyelim ki streamlit_app.py adlı bir dosyayı commit ettiniz ve ondan kurtulmak istiyorsunuz. git revert, yalnızca o dosyayı silen ve geri kalan geçmişi olduğu gibi bırakan yeni bir commit üretecektir.
Varsayılan olarak, git revert en son commit'i hedefler. Ancak commit kimliğini belirterek daha eski commit'leri de geri alabilirsiniz.
Örnek 2: Paylaşılan bir dalda itilmiş bir commit'i güvenle geri alma
Diyelim ki bozuk bir yapılandırma değişikliğini itiniz ve geçmişi silmeden bunu geri almanız gerekiyor.
Senaryo:
config.yaml dosyasına hatalı bir satır ekleyen bir commit'i itiniz. Ekibiniz zaten aynı uzak dal (main) üzerinde çalışıyor, bu yüzden reset veya force-push kullanamazsınız.
Çözüm:
Commit'i güvenle geri almak için git revert kullanın:
git revert <commit-hash>
Bu, geri alma mesajını onaylamak için bir metin düzenleyici açacaktır. Önceki commit'i geri alan yeni bir commit oluşturmak için düzenleyiciyi kaydedip kapatın.
Geri alınacak commit son commit ise:
git revert HEAD
Ardından değişiklikleri itin:
git push origin main
✅ Neden işe yarar: git revert geçmişi yeniden yazmaz — yeni bir commit ekler. Bu, paylaşılan dallar ve ekip iş akışları için güvenlidir.
Değişiklikleri Görselleştirme ve Doğrulama
Bazen sadece şimdiye kadar neler olduğunu görmek istersiniz — geri almak istediğiniz commit'i bulmak için önceki sürümlere kaydırmak gibi. Git, tam olarak bunu yapmanızı sağlar.
Commit geçmişini kontrol etmek için git log kullanma
Terminalinizde git log çalıştırın; geçerli dalınızdaki tüm commit'lerin tam listesini alırsınız. Bunu, geri almak veya değiştirmek istediğiniz belirli bir commit'i belirlemek için kullanabilirsiniz.
Örneğin: git log çıktısı şu şekilde görünebilir:
- e3a1b7f README'de yazım hatası düzeltildi
- 4f2c9a1 Giriş doğrulaması eklendi
- 9d5b3e8 İlk commit
Her satır bir commit karmasını (hash) ve bir mesajı gösterir. Bir değişikliği geri almak isterseniz, o commit karmasını kopyalayıp git revert ile kullanmanız yeterlidir.
GUI araçları veya uzantılar kullanma
Geliştirici değilseniz veya daha önce sürüm kontrolüyle çalışmadıysanız, tüm bu komut satırı talimatları yabancı bir dil gibi gelebilir. İşte burada GUI araçları devreye girer. Git'i görsel ve yeni başlayanlar için uygun hale getirir; böylece komut ezberlemek yerine önemli olana odaklanabilirsiniz.
GitHub Desktop
GitHub Desktop, GitHub depolarınızla çalışmak için temiz ve kolay bir arayüz sağlayan ücretsiz bir uygulamadır. Kurulumdan sonra, dallar oluşturmak, commit yapmak, uzağa itmek ve projenizi yönetmek için, Git komutları yerine tıklamalarla kullanabilirsiniz.
Git'e yeni başladıysanız veya değişiklikleri yönetirken daha akıcı bir deneyim istiyorsanız idealdir.

GitHub desktop kullanıcı arayüzü. Görsel kaynağı.
Sourcetree
Sourcetree, hem Mac hem de Windows için ücretsiz bir Git GUI aracıdır. Terminale dokunmadan dalları, commit'leri ve birleştirmeleri yönetmenin görsel bir yolunu sunar. Hafiftir, yeni başlayanlar için uygundur ve GitHub, GitLab ve Bitbucket gibi popüler platformlarla iyi çalışır.
Atlassian tarafından geliştirildiği için Jira, Confluence ve Bamboo gibi diğer Atlassian araçlarıyla da uyumludur; ekibiniz bu ekosistemi zaten kullanıyorsa harika bir tercihtir.

Sourcetree kullanıcı arayüzü. Görsel kaynağı.
GitKraken
GitKraken, depolarla çalışmayı akıcı ve görsel hale getiren özellik zengini bir Git GUI'dir. En öne çıkan özelliği, dalları, birleştirmeleri ve commit'leri takip etmeyi kolaylaştıran renkli ve etkileşimli depo geçmişi grafiğidir.
Solda projenizin dosya ağacını görürsünüz. Sağda ise tıkladığınız commit, dosya veya dal hakkında ayrıntılı bilgiler yer alır. Sezgiseldir, yeni başlayanlar için uygundur ve ileri düzey kullanıcılar için de güçlü özelliklerle doludur.
GitKraken kişisel kullanım için ücretsizdir, ancak kurumsal ortamda çalışıyorsanız veya özel depolar yönetiyorsanız ücretli bir plan gerekir.

Gitkraken kullanıcı arayüzü. Görsel kaynağı.
Git Commit'lerini Geri Almada En İyi Uygulamalar
İyi uygulamalara uyduğunuz sürece bir commit'i geri almaktan korkmanıza gerek yok. Gelin bunların neler olduğuna bakalım.
Deneyler için dallar kullanın
Yeni bir şey inşa ederken veya bir hatayı düzeltirken, main'den ayrı bir dal oluşturun. Tüm çalışmanızı orada yapın, kapsamlı şekilde test edin ve ancak ondan sonra ana dala geri birleştirin.
Böylece, herhangi bir hata veya geri alma işlemi, ekibin geri kalanının işini bozmadan sizin dalınızda güvenle kalır.
Emin olmadığınızda git revert kullanın
Diyelim ki yerel bir dalda birkaç commit yaptınız ve yanlışlıkla bunları ana dala itiniz. Tüh. Şimdi paylaşılan geçmişi bozmadan bu commit'lerden birini geri almak istiyorsunuz. İşte git revert burada günü kurtarır.
git revert HEAD~1 çalıştırın. Bu, sondan bir önceki commit'teki değişiklikleri geri alan yeni bir commit oluşturur (çünkü HEAD~1 onu işaret eder). Hiçbir şeyi silmez, bunun yerine değişiklikleri temiz ve izlenebilir bir şekilde tersine çevirir.
Bunu yaptıktan sonra, düzeltmeyi git push origin <your-branch-name> komutuyla uzağa itmayı unutmayın.
Not: Değişiklikler zaten paylaşılan bir dala itilmişse git revert kullanın. Commit geçmişini bozulmadan tutar ve ekip arkadaşlarınızı rahatsız etmez.
Değişikliklerinizi belgeleyin
Sürüm geçmişinizi korumak için bir Confluence sayfası açmanız gerekmez; çünkü Git bunu zaten sizin için yapar. Püf noktası onu akıllıca kullanmaktır.
Açık ve anlamlı commit mesajlarıyla başlayın. Bir şeyi geri alıyorsanız, mesajın neden geri aldığınızı açıklamasını sağlayın.
Ayrıca commit kimliğini ve değişenlerin kısa bir özetini not edin. Genellikle dokümantasyon amacını karşılamak için bu yeterlidir.
Ekip olarak işbirliği yapma
Başkalarının da kullandığı bir dalda git reset, rebase veya commit --amend gibi komutları kullandığınızda, commit geçmişini değiştirirsiniz. Eski geçmişi çekmiş olan herkes artık çatışmalarla karşılaşacaktır.
Bu yüzden, geçmişi yeniden yazan komutları yalnızca yerel veya özellik dallarında kullanın. Paylaşılan geçmişi zorla itmeniz veya yeniden yazmanız gerekirse, bunu ekibinize mümkün olduğunca erken bildirin.
Sonuç
Git, hataları geri almanın farklı yollarını sunar; ancak hangi aracın ne zaman ve nasıl kullanılacağını bilmek, kendinden emin geliştiricilerle kafası karışık olanları ayırır.
git reset'in farklı modlarda nasıl çalıştığını, git revert'i ne zaman kullanmanız gerektiğini ve durumunuza göre doğru aracı seçmenin neden kritik olduğunu inceledik.
Özetle:
- Paylaşılan dallara itildikten sonra geçmişi yeniden yazmaktan kaçının
- Zorla itmeniz gerekiyorsa erkenden iletişim kurun
- İtilmiş commit'leri güvenle geri almak için
git revertkullanın
Sonraki adımlar için, bir birleştirme commit'ini nasıl geri alabileceğinizi burada öğrenin. Temelleri tamamladıysanız ve daha derine inmeye hazırsanız, orta seviye git kursumuza göz atın!
SSS
git reset --soft HEAD~1 gerçekte ne yapar?
HEAD işaretçinizi bir commit geri taşır ancak tüm değişiklikleri sahnelenmiş halde bırakır. Commit'i, hiçbir çalışmanızı kaybetmeden gözden geçirmek istediğinizde idealdir.
--soft yerine ne zaman git reset --mixed kullanmalıyım?
Dosya değişikliklerinizi koruyup hazırlama alanından çıkarmak istediğinizde --mixed kullanın. Yeniden commit etmeden önce düzenleme yapmak için kullanışlıdır.
git push --force kullanmak tehlikeli mi?
Evet, özellikle bir ekip ortamında. Uzak dalda commit geçmişini yeniden yazar ve dikkatli kullanılmazsa ekip arkadaşlarınızın çalışmalarını silebilir.
git revert ile git reset arasındaki fark nedir?
git revert, geçmişe dokunmadan değişiklikleri geri alan yeni bir commit ekler; git reset ise HEAD'i taşır ve geçmişi değiştirebilir — özellikle de itilmişse risklidir.
Değişikliklerimi kaybetmeden bir commit'i geri alabilir miyim?
Evet, değişikliklerinizi sahnede tutmak için git reset --soft veya çalışma dizininizde tutmak için --mixed kullanın.
Paylaşılan bir depoda bir commit'i geri almanın en güvenli yolu nedir?
git revert kullanın. Geçmişi koruyarak değişiklikleri tersine alan yeni bir commit oluşturur ve ekip arkadaşlarınızla çatışmaları önler.
Geri almak istediğim commit'i nasıl bulurum?
Önceki commit'leri listelemek için git log kullanın. Geri almak veya sıfırlamak istediğiniz commit'in karmasını kopyalayın.
GitHub Desktop gibi GUI araçları commit'leri geri alabilir mi?
Evet, GUI araçları komut satırı sözdizimini hatırlamaya gerek kalmadan commit'leri geri almanın kullanıcı dostu yollarını sunar. Yeni başlayanlar için idealdir.
Reset'ten sonra commit geçmişine ne olur?
git reset ile commit(ler) geçmişinizden kaldırılır — itilmişlerse hariç. O zaman, zorla itmezseniz uzak depo hâlâ kaydı tutar.
İttikten sonra bir commit'i düzeltmek (amend) uygun mu?
Hayır, koordinasyon olmadan olmaz. Değiştirip ardından zorla itmek paylaşılan çalışmayı bozabilir. Yalnızca izole dallarda veya tek kişilik projelerde yapın.
Srujana, Bilgisayar Bilimleri alanında dört yıllık dereceye sahip serbest çalışan bir teknoloji yazarıdır. Veri bilimi, bulut bilişim, geliştirme, programlama, güvenlik ve daha birçok konuyu yazmak onun için doğal bir süreçtir. Klasik edebiyata ve yeni yerler keşfetmeye tutkuyla bağlıdır.

