Şimdiye kadar ideal senaryoyu ele aldık: kod yazıyor, commit oluşturuyor ve Pull Request açıyorsunuz. Gerçek hayatta ise işler sık sık ters gidebilir: bir dosyayı eklemeyi unutabilir, commit mesajında yazım hatası yapabilir ya da yanlış yöne gittiğinizi fark edebilirsiniz. Bu makalede, IDE araçlarını kullanarak en sık karşılaşılan sorunları nasıl çözeceğinize bakacağız.
Örnekler ve arayüz görüntüleri JetBrains IDE'lerine aittir; eylemlerin adları ve konumları kullandığınız sürümde farklı olabilir. Alıştırmalar için ayrı bir eğitim repository'si kullanın. Gerçek bir projede ise o projenin branch, commit ve değişiklikleri gönderme kurallarına uyun.
Claude Code projede çalışırken, kaydedilmiş geçmiş önceki bir duruma dönmenize yardımcı olur. Ancak Git her tuş vuruşunu saklamaz; commit edilmemiş değişiklikleri kaybedebilirsiniz. Geri almadan önce branch'i, seçilen dosyaları ve gerekli kopyanın mevcut olup olmadığını kontrol edin.
Rollback - yerel değişiklikleri geri alma
Senaryo: Bir dosyayı değiştirdiniz, ancak tüm düzenlemelerin yanlış olduğunu fark ettiniz. Dosyayı son commit'teki durumuna hızla döndürmek istiyorsunuz.

Rollback işlevini kullanın:
- sol paneldeki
Commitsekmesini açın; - listede geri almak istediğiniz değiştirilmiş dosyayı bulun (ya da birkaç dosya seçin);
- sağ tıklayıp
Rollback'i seçin (ya da kıvrımlı ok simgesine tıklayın).
IDE, seçilen yerel değişiklikleri kaybedeceğiniz konusunda sizi uyarır. Önce diff'e bakıp gerekli olanları kaydedin. Rollback'i yalnızca gerçekten silmek istediğiniz düzenlemeler için onaylayın; ardından sonucu kontrol edin. Bu işlem commit edilmemiş çalışmayı siler, yedeklemez.
Rollback'ten önce, aynı dosyada ajanın yaptığı değişiklikleri önceki düzenlemelerden ayırın. Rollback seçilen dosyaları son commit'in (HEAD) durumuna döndürür ve hem stage edilmiş hem de edilmemiş değişiklikleri atar. Bu, flag kullanmadan çalıştırılan git restore ile aynı değildir: bu komut içeriği index'ten alır ve yalnızca çalışma dosyalarını değiştirir.
Amend - son commit'i tamamlama
Senaryo: Az önce Commit'e bastınız ve önemli bir dosyayı (örneğin güncellenmiş bir testi) eklemeyi unuttuğunuzu ya da mesajda yazım hatası yaptığınızı fark ettiniz. Commit henüz paylaşılmadıysa Amend kullanabilirsiniz. Özellikle ortak geçmişe eklenmiş commit'ler için ayrı bir düzeltme commit'i de uygun bir seçenektir.

Henüz paylaşılmamış bir commit'i tamamlamak için Amend işlevini kullanın:
Commitpenceresinde unuttuğunuz dosyadaki düzeltmeleri yapın ve yanındaki kutuyu işaretleyin;- Commit Message panelinde Amend onay kutusunu (ya da dişli simgesi -> Amend Commit seçeneğini) bulun ve işaretleyin;
- IDE önceki commit'in mesajını getirir; isterseniz düzenleyebilirsiniz;
Commit'e basın.
Amend, eski commit'in yerine farklı bir kimliğe sahip yeni bir commit oluşturur. Eski nesne yerinde düzenlenmez. Önceki commit zaten gönderilmiş ve başkaları tarafından kullanılıyorsa genellikle ayrı bir düzeltme yapmak daha iyidir.
Bu işlev hakkında daha fazla bilgi için JetBrains'in resmi rehberine bakın.
Undo Commit
Senaryo: Bir commit oluşturdunuz ama Push ile henüz göndermediniz ve acele ettiğinizi fark ettiniz. Çalışmaya devam edebilmek için commit'in geçmişten çıkmasını, değişikliklerin ise düzenleyicide kalmasını istiyorsunuz.
Undo Commit işlevini kullanın:
- geçmişi açın; alttaki
Git -> Logsekmesine gidin; - genel grafiğin en üst satırını değil, özellikle mevcut branch'in (HEAD) son commit'ini bulun ve bağlam menüsünü açın;
Undo Commit'i seçin.

Değişiklik listesini (genellikle Default Changelist) seçip OK'e basın. Commit geçmişten çıkar, dosyalar ise değiştirilmiş durumda Commit penceresine döner. Hiçbir şey kaybetmediniz; rahatça kod yazmaya devam edebilirsiniz.
Reset - branch'i taşıma ve dosya durumu
Reset Current Branch to Here... işlevi, branch işaretçinizi seçtiğiniz herhangi bir commit'e taşıyan güçlü bir araçtır. Duruma göre son işlemleri nazikçe geri alabilir ya da bozuk kodu kökten silebilir.
Senaryo A - son yerel commit'leri geri alma
Yerel olarak birkaç commit oluşturdunuz (Push'tan önce), sonra tuttuğunuz yolun baştan sona yanlış olduğunu fark ettiniz.
Git -> Logsekmesini açın;- geri dönmek istediğiniz son sağlam commit'i bulun (hatalı commit serisinden önceki commit);
- üzerine sağ tıklayıp
Reset Current Branch to Here...'ı seçin.
Senaryo B - sunucu durumuna sıfırlama
İzlenen dosyaları uzak branch'in durumuna döndürmek istiyorsunuz. Önce gerekli yerel çalışmayı kaydedin ve Fetch çalıştırın: origin/main etiketi sunucunun sürekli güncellenen durumunu değil, en son alınan durumu gösterir. Şu anda çatışmalı bir işlem sürüyorsa önce onu çözüp tamamlayın ya da iptal edin; Hard'ı her derde deva gibi kullanmayın.
Git -> Log'u açın;- uzak branch işaretçisini bulun; bu genellikle mor etiketli
origin/maincommit'idir (ya daorigin/branch_adiniz). Bu, sunucudaki kodun bilinen en güncel durumudur; - bu commit'e sağ tıklayıp
Reset Current Branch to Here...'ı seçin.

Sıfırlama modları
Sıfırlama penceresinde modu bilinçli seçin. Her üç seçenekte de mevcut branch seçilen commit'e taşınır; ancak index'in ve çalışma dosyalarının durumu farklı olur:
- Soft çalışma dosyalarını ve index'i korur. Mixed çalışma dosyalarını korur, ancak index'i seçilen commit'e getirir; fark stage edilmemiş olarak kalır. İkisi de dosyaların içeriğiyle çalışmaya devam etmenizi sağlasa da farklı modlardır;
- Hard, index'i ve izlenen dosyaları seçilen commit'e getirir; commit edilmemiş değişiklikleri siler. İlişkisiz sıradan untracked dosyalar kalabilir, ancak geri yüklemeyi engelleyen yollar silinebilir. Commit'ler tüm depolardan hemen silinmez ama çalışmanızı sonradan kurtarabileceğinizi varsaymayın.
Push'tan sonra ne yapmalı
Senaryo: push yaptınız ve hatayı ancak sonradan fark ettiniz.
Commit sunucuya ulaştığında projenin ortak geçmişinin parçası olur. Bu geçmişi Reset ya da Amend ile yeniden yazmak ekip arkadaşlarınız için büyük sorunlar çıkarabilir; değişikliklerinizi çoktan indirip bunların üzerine çalışmaya başladıklarını düşünün.
Doğru ve güvenli çözüm: hatayı düzelten yeni bir commit oluşturup normal şekilde push yapın. Bu, olağan bir uygulamadır. Hatalı kodun ardından düzeltmeyi açıkça anlatan bir commit'in geldiği doğrusal geçmiş, projenin gelişimini tüm ekip için anlaşılır kılar.
IDE'de ayrıca Revert Commit adlı özel bir işlev bulunur. Git -> Log içindeki hatalı commit'e sağ tıklayıp Revert Commit'i seçerseniz IDE, hatalı commit'in yaptığının tam tersini gerçekleştiren yeni bir "ters commit" oluşturur (örneğin eklenen satırları siler).

Revert, yayımlanmış bir değişikliği yeni bir commit'le geri almak için kullanışlıdır. Hem kod hem metin için uygulanabilir, ancak sonraki düzenlemelerle çatışabilir. Çatışmayı çözdükten sonra sonucu kontrol edin; karmaşık bağımlılıklarda ayrı bir düzeltme daha anlaşılır olabilir.
Stash / Shelve - değişiklikleri geçici olarak kaldırma
Senaryo: Yeni bir feature üzerinde yoğun biçimde çalışıyorsunuz; dosyaların hepsi kırmızı ve mavi. Derken takım lideri çıkageliyor: "Her şeyi bırak, main branch'indeki bug'ı hemen düzeltmemiz gerekiyor." Tamamlanmamış ve çatışan değişiklikleriniz olduğu için main'e geçemiyorsunuz. Proje kuralları izin veriyorsa arada yerel bir commit oluşturabilirsiniz; ancak çalışmanızı şu an commit etmek uygun değilse erteleyebilirsiniz.
Çözüm, çalışmayı geçici olarak sanal bir kutuya kaldırmak. Git'te buna Stash denir; IDE'de ise ayrı bir mekanizma olan Shelve (rafa kaldırma) bulunur.
Commitpenceresini açıp değiştirilmiş dosyaları seçin;- Shelve Changes... seçeneğini belirleyin; bu adımlar Shelve içindir, Git Stash ayrı olarak çalıştırılır;
- bu kayıt için anlaşılır bir ad yazıp Shelve'e basın.

Shelve'den sonra kalan dosyaları kontrol edin: gerekli tüm düzenlemeler gerçekten rafa kaldırıldı mı? Artık main'e geçip hatayı düzeltebilir ve sonucu proje kurallarına göre kaydedebilirsiniz. Ardından çalışma branch'inize dönün, Shelf'i açın ve Unshelve'i seçin.
Git Stash için ayrı stash listesini kullanıp gerekli kaydı geri yükleyin. Bu farklı bir depolama alanıdır. Sıradan bir stash, ek bir seçenek olmadan yeni untracked dosyaları içermez; branch değiştirmeden önce gerekli tüm çalışmanın korunduğundan emin olun. Geri yükleme sırasında çatışma çıkabilir, bu yüzden sonrasında dosyaları yeniden kontrol edin.
Log ile ileri düzey çalışma
Git -> Log penceresi yalnızca commit listesi değildir; inceleme yapmak için güçlü bir araçtır.
- Commit hash'i - harf ve rakamlardan oluşan bir dize; örneğin
a1b2c3d. Kodunuzun her anlık görüntüsünün benzersiz tanımlayıcısıdır.![Log'daki commit hash'i]()
- geçmişi branch'e, yazara, tarihe ya da commit mesajındaki bir sözcüğe göre filtreleyebilirsiniz; böylece belirli bir bölüm üzerinde kimin, ne zaman çalıştığını hızla bulursunuz;
- belirli bir kod satırının eklendiği ya da silindiği commit'i bulmak için
Logpenceresinde yalnızca mesajlarda değil, değişikliklerin içeriğinde de arama yapabilirsiniz; - düzenleyicinin kenar boşluğuna (satır numaralarının olduğu yere) sağ tıklayıp
Annotate with Git Blame'i seçin; IDE her satırın karşısında, onu en son kimin ve hangi commit'te değiştirdiğini gösterir. Ardından commit'i ve ilgili tartışmayı açın: Blame yalnızca satırdaki son değişikliği gösterir, nedenini açıklamaz.
Tehlikeli bölge - Force Push
Gönderilmiş commit'leri değiştirmenin kötü bir fikir olduğunu gördük. Peki yerel geçmişinizi (örneğin Undo Commit veya Amend ile) değiştirdiğiniz hâlde sunucuda eski sürüm duruyorsa ne olur? Normal push sırasında Git, ortak geçmişin üzerine yazılmasını önlemek için hata verir.
Force push, yeni geçmiş öncekinin devamı olmasa bile seçilen uzak referansın değiştirilmesine izin verir. Bu, tüm sunucuyu temizlemek anlamına gelmez; sonuçlar gönderilen referanslara bağlıdır. Branch koruması bu gönderimi engelleyebilir.
Force push, yerel geçmişinizde bulunmayan commit'leri uzak branch'ten kaldırabilir. Bu nedenle ortak bir branch'in geçmişini yeniden yazmak için ekibin ayrıca uzlaşması gerekir. Sıradan bir düzeltme için yeni bir commit ya da Revert kullanın.
Force push'un tartışılabileceği tipik bir durum, geçmişi yeniden yazılması konusunda uzlaşılmış kendi branch'inizdir. Burada bile başkalarının yeni commit'leri olup olmadığını kontrol edin. --force-with-lease seçeneği, uzak branch'in beklenen durumunu kontrol eder; ancak hangi commit'lerin değiştirileceğini anlama gereğini ortadan kaldırmaz.
Ekran görüntüsünde Force Push, Push düğmesinin açılır menüsünde yer alıyor. Kullanmadan önce IDE sürümünüzün hangi force push modunu uyguladığını kontrol edin.

Ne yaptığınızdan tamamen emin değilseniz force push kullanmayın. Düzeltmeleri içeren yeni bir commit oluşturmak (ya da Revert kullanmak) daha güvenlidir.
Bu kural sizin için de Claude Code için de geçerli: ortak geçmişi yeniden yazmak tehlikelidir. Force push'u sıradan bir işlem gibi görmeyin ve ortak branch'lerde çalıştırılmasına izin vermeyin. Claude sunucudaki geçmişi yeniden yazacak bir işlem önerirse durun ve güvenli bir alternatif olup olmadığını kontrol edin (yeni commit, Revert).
Projeyi güncelleme
Yeni bir göreve başlamadan önce başlangıç branch'ini ve tamamlanmamış değişiklikleri kontrol edin. Gerektiğinde güncellemeleri alın ve birleştirme sonucunu inceleyin. Update Project, çatışma çıkmayacağını garanti etmez; ayarlara göre merge ya da rebase kullanabilir.
Güncellemeden sonra mevcut branch'i, commit listesini ve dosyaların durumunu kontrol edin. Çatışma çıktıysa göreve devam etmeden önce çözün.
Git Log bağlam menüsü
Git -> Log sekmesini açıp herhangi bir commit'e sağ tıkladığınızda geniş bir bağlam menüsü açılır. En kullanışlı komutları görevlerine göre gruplandırarak inceleyelim.

Grup 1 - görüntüleme ve inceleme (güvenli işlemler)
Copy Revision Number- commit'in benzersiz hash'ini panoya kopyalar. Commit bağlantısını bir çalışma arkadaşınıza göndermek veya bir görevde (Jira, YouTrack) belirtmek için kullanışlıdır;Compare with Local- eski commit'teki dosya durumunu düzenleyicideki mevcut hâliyle karşılaştırır. Kodun bir ay önce nasıl göründüğünü anlamak için iyi bir yoldur;Show Repository at Revision- projedeki tüm dosyaların bu commit anındaki yapısını açar (mevcut branch değişmez).
Grup 2 - branch'lerle çalışma
New Branch...- geçmişte seçilen commit'ten yeni bir branch oluşturur. Çok ilerleyip her şeyi bozduğunuzu fark ettiğinizde ve son çalışan noktadan yeni bir branch başlatmak istediğinizde çok işe yarar;Checkout Revision- yerel projeyi bu commit'e geçirir. Detached HEAD durumuna girersiniz: eski kodu çalıştırabilirsiniz, ancak yeni commit'ler hiçbir branch'e bağlanmaz. Detached HEAD'de gerekli commit'leri oluşturduysanız önce bunları yeni bir branch ile koruyun. Geri dönmek için normal bir branch'i (örneğinmain) Checkout edin.
Grup 3 - değişiklik ve taşıma
Cherry-Pick- başka bir branch'teki belirli bir commit'i mevcut branch'inize kopyalamanızı sağlar. Örneğin başka bir branch'teki biri çalışmanızı engelleyen bir bug'ı düzelttiyse, tüm branch'i birleştirmeden bu commit'i Cherry-Pick ile alabilirsiniz;Edit Commit Message...- commit henüz gönderilmediyse (Push yapılmadıysa) mesajını hızla değiştirebilirsiniz. Yalnızca metni değiştirmek gerektiğinde Amend'den daha pratiktir.
Grup 4 - değişiklikleri geri alma
Bu komutları yukarıda ayrıntılı olarak ele aldık:
Reset Current Branch to Here...- mevcut branch'i bu commit'e taşır (bu branch'ten erişilebilen geçmişi değiştirir);Revert Commit- değişen içeriği geri alan bir "ters commit" oluşturur; ardından bu yeni yerel commit sunucuya gönderilir;Undo Commit...- yerel commit'i geri alır, değişikliklerini yeniden değişiklikler penceresine getirir.
Grup 5 - geçmişi yeniden yazma
Menüde Squash Commits... (birkaç commit'i tek commit'te birleştirme), Drop Commits (geçmişin ortasındaki bir commit'i silme) ve Interactively Rebase from Here... gibi komutlar da bulunur. Bunlar yerel geçmiş üzerinde hassas düzenlemeler yapmak için kullanılan araçlardır (Interactive Rebase).
Bu komutları öğrenme aşamasında kullanmamaya çalışın; seçilen commit'leri ve branch geçmişinin devamını yeniden yazabilirler. Gerçek ekip çalışmalarında, taslak durumdaki yerel branch'i incelemeye göndermeden (Pull Request açmadan) önce düzenlemek için kullanılırlar.
Git - güvenlik ağınız
Geri alma yöntemini işin durumuna göre seçin: commit edilmemiş dosyalar, yerel commit'ler ve yayımlanmış geçmiş farklı işlemler gerektirir. Gerekli sürümü kaydetmek ve işlemden önce değişiklikleri incelemek, her hatayı geri alabileceğinizi ummaktan daha güvenlidir.
Claude Code ile birlikte nasıl çalışır
Claude Code projede çalışırken bu araçlar sizin temel korumanızdır. Şöyle kullanabilirsiniz:
- sık sık commit oluşturun: her commit bir geri dönüş noktasıdır. Ajan yanlış yöne giderse son çalışan duruma dönebilirsiniz;
- commit edilmemiş düzenlemeleri geri alırken önce gerekli değişiklikleri ayırın, ardından Rollback veya git restore'da kapsamı ve geri yükleme kaynağını kontrol edin;
- commit oluşturulmuş ama gönderilmemişse
Undo Commitdeğişiklikleri düzenleyiciye geri getirir; - hata sunucuya ulaştıysa geçmişi yeniden yazmak yerine düzeltme içeren yeni bir commit ya da
Revertdaha güvenlidir.
Verileri silen veya geçmişi yeniden yazan işlemleri (Reset hard, force push) düşünmeden onaylamayın. Önce Claude Code'un tam olarak ne yapacağını inceleyin. Büyük bir işe başlamadan önce gerekli durumu kaydedin ve geri dönüş noktasının gerçekten çalışmanızı içerdiğini kontrol edin.
Önceki makale: Pull request oluşturma ve birleştirme · Sonraki makale: Repository oluşturma, rebase ve gizli bilgiler

GO TO FULL VERSION