- macOS ortamında proje değişikliklerinin her 10 dakikada bir otomatik olarak silindiği bir durum raporlandı
- İnceleme sonucunda nedenin Claude Code değil, kullanıcının oluşturduğu ayrı bir yerel otomasyon aracı olduğu ve bu aracın GitPython üzerinden düzenli olarak
git reset --hard origin/main çalıştırdığı doğrulandı
- Aynı çalışma dizini paylaşıldığı için sorumlu Claude Code gibi görünse de, gerçekte sıfırlamayı harici bir betik yapıyordu
- Claude Code ekibi, dahili kodda ilgili komutu çalıştıran bir mantık olmadığını açıkça belirtti; benzer davranışın yalnızca
--dangerously-skip-permissions seçeneği kullanıldığında mümkün olabileceğini açıkladı
- Sonuç olarak sorun, Claude Code hatası değil kullanıcı aracının sorunu olarak değerlendirildi; başlık düzeltilerek konu kapatıldı
Sorunun belirtileri ve ortam
- Claude Code’un kullanıcının proje deposunda 10 dakikalık aralıklarla
git fetch origin ve git reset --hard origin/main çalıştırdığı gözlemlendi
- Bu davranış, commit edilmemiş izlenen dosyalardaki tüm değişiklikleri siliyor; izlenmeyen dosyalar ise korunuyor
- Git worktree ortamında bu tür sıfırlamalar meydana gelmiyor
- Ortam bilgileri
- Claude Code sürümü: 2.1.87 (Homebrew cask, Bun binary)
- OS: macOS 15.4 (Darwin 25.3.0, arm64)
- Shell: zsh
İnceleme süreci
- Git reflog içinde 10 dakikalık aralıklarla
reset: moving to origin/main kaydının 95’ten fazla kez yazıldığı görüldü
- Oturumlara göre başlangıç ofseti değişse de, her oturum içinde tam 600 saniyelik aralıklarla tekrar ediyordu
- Gerçek zamanlı yeniden üretim testinde, izlenen dosya (
api.ts) sıfırlama anında eski haline dönerken, izlenmeyen dosya (.canary-test.txt) olduğu gibi kaldı
.git/ dizini fswatch ile izlendiğinde, sıfırlama anında .git/refs ve .git/logs/HEAD dosyalarının değiştiği deseni yakalandı
- lsof sonucuna göre, ilgili deponun CWD’sini kullanan tek süreç Claude Code CLI idi
- Harici git süreçleri tespit edilmediği için, işlemin içeride libgit2 benzeri bir yöntemle yapıldığı tahmin edildi
- worktree ortamında reflog’da hiçbir sıfırlama kaydı bırakılmadı
Elenen nedenler
- Git hook’ları, Claude Code kullanıcı hook’ları, eklenti güncellemeleri, macOS bulut senkronizasyonu, Cron/LaunchAgents, IDE, Time Machine, dosya izleme araçları vb. etkenlerin tamamının ilgili olmadığı doğrulandı
- Her bir başlık, gerçek yapılandırma dosyaları ve süreç kontrolleri üzerinden elendi
İkili dosya analizi (kısmi)
- Claude Code binary’si içindeki bazı fonksiyonlarda
["fetch","origin"] komutunu çalıştıran kod parçaları bulundu
git pull sarmalayıcı fonksiyonu ve fileHistory durum yönetimi mantığı mevcut, ancak 10 dakikalık periyodik zamanlayıcı tanımlanamadı
Etki
- Commit edilmemiş değişiklikler her 10 dakikada bir otomatik olarak silindiği için, 2 saatlik bir oturum boyunca değişiklikler en az üç kez kayboldu
- Tüm değişiklikler commit edilmiş durumdayken sıfırlama anlamsız kaldığından, sorun zaman zaman ortaya çıkıyormuş gibi görünüyordu
Claude Code ekibinin yanıtı
- Jarred-Sumner, “Claude Code’un kendisinde
git reset --hard origin/main çalıştıran bir kod yok” diyerek bunu açıkça ifade etti
--dangerously-skip-permissions seçeneği kullanıldığında Claude’un prompt olmadan shell komutları çalıştırabildiğini,
/loop 10m <prompt> komutunun periyodik olarak “uzak depo ile senkronize et” isteği vermesi halinde git fetch && git reset --hard origin/main çalıştırılabileceğini açıkladı
- Doğrulama yöntemi olarak
grep -r "reset --hard" ~/.claude/projects/ ile oturum günlüklerinde arama yapılması
claude --debug-file /tmp/debug.txt --dangerously-skip-permissions çalıştırılıp 10 dakika beklendikten sonra grep -i bash /tmp/debug.txt | grep reset ile kontrol edilmesi önerildi
- Claude Code’un
fileHistory özelliği git ile ilgili değil ve dahili olarak git reset çağırmıyor
Nihai sonuç
- 30 Mart 2026 güncellemesinde, sorunun kök nedeninin Claude Code değil kullanıcının ayrı bir yerel aracı olduğu doğrulandı
- Bu aracın GitPython kullanarak her 10 dakikada bir hard reset yaptığı ve Claude Code ile aynı dizini izlediği belirlendi
- Konu “not planned” durumuyla kapatıldı; başlık da “Claude Code sıfırlama çalıştırıyor” ifadesinden “Benim otomasyon aracım sıfırlama çalıştırıyor” şeklinde değiştirildi
Geçici çözüm yolları
- git worktree kullanıldığında sıfırlamanın etkisi görülmüyor
- Sık commit atarak değişiklikler korunabiliyor
İlgili konular
#8072 — kod değişikliklerinin tekrar tekrar geri alınması sorunu
#7232 — onay olmadan git reset --hard çalıştırılması nedeniyle veri kaybı
#32793 — claude install komutunun git remote URL’sini yanlış değiştirmesi sorunu (benzer ama ayrı bir vaka)
1 yorum
Hacker News görüşleri
Bu, gönderiyi yazan kişinin doğrudan paylaştığı bir güncelleme
Sorun bağlantısı uyarınca, sorunun asıl nedeni Claude Code değil, yazarın yerel test için yaptığı bir aracın hatasıymış
Bu araç, yerel çalışma dizinini uzaktakiyle eşitlemeye çalışırken her döngüde bir hard reset yapıyor ve commit edilmemiş tüm değişiklikleri siliyormuş
Başlığı “Geliştirici, her 10 dakikada bir git reposunu sıfırlayan bir script yazıp bunu unuttuktan sonra Claude Code’u suçladı” gibi bir şeye çevirirse flag’i kaldırırım
Asıl sorun, başlıktaki çift tire işaretinin HN’de otomatik olarak en dash’e çevrilmiş olması
Ben de bu meseleyi bizzat inceledim ve Claude Code’un kendisinde
git reset --hard origin/mainçalıştıran bir kod yokMuhtemelen geliştirici
/loop 10mgibi bir komut çalıştırdı ya da her 10 dakikada bir git reset yapan bir cron işi oluşturduSüreçleri 0,1 saniye aralıklarla izleyip git süreci görmediğini söylemek pek güvenilir değil
git komutları o kadar hızlı ki bu aralıkla yakalanmayabilir
Bunun yerine
$PATHiçindeki git’i sarıp tüm çalıştırmaları log’a yazdırmak daha iyiHatta kullanıcının girdisi olmadan bunu “ajanvari” şekilde göndermiş bile olabilir (tamamen tahmin)
Sorun bağlantısı
Bu yazı, belirli bir kişinin sorununu tüm sistemin sorunuymuş gibi yanlış anlamaya yol açabilir
Muhtemelen bir miktar context bozulması yaşanmış
Claude’un
stash→seddeğişimi → çakışma →reset --hardsırasıyla işleri bozduğu olmuştuBu yüzden
CLAUDE.mddosyasının en üstüne şu uyarıyı yazdım“
sedile toplu değiştirme yok;git push --force,git reset --hardgibi yıkıcı git komutları kesinlikle yasak”Ondan sonra durum epey düzeldi
Belirli git komutlarını engelleyen bir hook eklerseniz, modelin tahmin belirsizliğinden bağımsız olarak güvenli çalışır
Buna bakınca eski mühendisliğin temel ilkeleri — deterministik ve tekrarlanabilir süreçler — unutulmuş gibi geliyor
Ben de buna benzer bir sorun yaşadım
Normalde claude-code’u bir sandbox (bwrap, srt) içinde çalıştırıyorum ama dışarıda çalıştırınca
/commandsilerken ya da menüyü her kapattığımdaghçağırıyorKeepassXC’yi gizli bilgi yöneticisi olarak kullandığım için her seferinde onay penceresi çıkıyor ve bunu hemen fark ediyorum
Claude’a sorduğumda nedenin git context özelliği olduğunu söyledi.
KeepassXC oturum bazlı izne izin vermediği için sonunda her seferinde kimlik doğrulama istiyor
İzin ayarları varsa bunun engellenmesi gerekmez mi diye düşünüyor insan
Ama kullanıcı bunu
--dangerously-skip-permissionsseçeneğiyle çalıştırmış, dolayısıyla öngörülemez davranışları göze almış sayılırHatta prompt injection ile aşılabileceği şeklinde de yorumlanabilir
Hard reset’i engelleyemeyen kurallar sadece göstermelik kalır
Yazarın kendisinin açıkladığına göre, neden Claude Code değil, kendi yaptığı yerel test aracındaki bir bug’mış
Sorun bağlantısı
SaaS tabanlı binary blob geliştirme araçları kullanıldığında, debug etmesi zor bu tür sorunların ortaya çıkması şaşırtıcı değil
Sonunda kullanıcı sebebi kendisi buldu ve sorunun kaynağı kendi aracıydı
Böyle şeyler eskiden de oluyordu, şimdi de oluyor.
Ben de LLM yardımı olmadan kendi ellerimle yeterince çok şeyi bozdum
Bu yüzden geliştirme yaparken her zaman Mac’in Time Machine özelliğini kullanıyorum.
Claude bir dosyayı sildiğinde “geri yüklensin mi?” sorusu çıkınca, sanki Claude rahatlamış gibi hissediyorum
Yedekler gerçekten bir can simidi