Projeyi Bozmadan Git Depolarından Dosyalar Nasıl Kaldırılır
Git deposunda dosyaların nasıl kaldırılacağını öğrenin, yaygın hatalardan kaçının ve karmaşık ya da hassas senaryolarda bile deponuzu temiz şekilde yönetin.
Git’te dosya kaldırmak her zaman göründüğü kadar basit değildir. Sistemde bir dosyayı silersiniz ama bu, depodan da silindiği anlamına gelmez. Geçmişinizde hâlâ var olabilir ya da daha kötüsü, bir yapılandırma dosyası veya bir API anahtarı gibi, yanlışlıkla commit edilebilir.
Bu kılavuzda, Git’ten dosyaların nasıl kaldırılacağını öğreneceksiniz. git rm gibi temel komutlarla başlayacak, ardından izlenmeyen dosyaları temizleme ve commit geçmişini düzenleme gibi daha gelişmiş yöntemlere geçeceğiz.
Önkoşullar
Git ile dosyaları kaldırmadan önce, her şeyin kurulu olduğundan emin olalım.
Önce, Git yüklü mü kontrol edin. Terminalinizi açıp şunu çalıştırın:
Görsel bir arayüz tercih ediyorsanız GitHub Desktop, Sourcetree veya GitKraken gibi bir Git GUI’si de kurabilirsiniz. Ancak bu kılavuzda komut satırını (Git Bash) kullanacağım.
Bir ekibin parçasıysanız veya GitHub ya da GitLab gibi uzak bir depoyla çalışıyorsanız, özellikle depoda değişiklik yapma izniniz olduğundan emin olun.
Not: Bazı dosya kaldırma işlemleri geri alınamaz. Bu yüzden, dosyaları silen herhangi bir komut çalıştırmadan önce projenizin yedeğini almak veya en azından deponuzun durumunu iki kez kontrol etmek iyi bir fikirdir.
Her şey tamamsa başlayalım.
Git’te Temel Dosya Kaldırma
Git’te dosya kaldırmanın, yapmak istediğinize bağlı olarak birkaç yolu vardır. Yaygın seçeneklere bakalım:
git rm kullanma
git rm komutu, dosyaları Git deponuzdan kaldırır. Çalıştırdığınızda iki şey olur:
Git dosyayı çalışma dizininizden kaldırır
Bu değişikliği bir sonraki commit için sahneler
Ancak Git yalnızca dosyayı silmez. Silmeyi geçmişinizde izler. Commit’i yaptığınızda, dosya projeden resmen kaldırılmış olur.
Bu, temp klasörünün içindeki her dosyayı, klasörün kendisini silmeden kaldırır.
Git ayrıca bazı güvenlik kontrolleri ekler. Bir dosyada henüz commit edilmemiş değişiklikler varsa, zorlamadığınız sürece Git onu silmez. Bu yüzden bunu yalnızca o değişikliklerin atılabileceğinden eminseniz kullanın:
(Burada * hepsi demektir. .txt ile biten herhangi bir dosya adını eşleştirir.)
2. --cached
Bu, dosyayı depodan kaldırır ancak bilgisayarınızda bırakır. Diyelim ki yanlışlıkla config.env gibi hassas bir dosyayı ekledim. Depoda olmasını istemiyorum ama makinemde lazım. O zaman şunu çalıştırırım:
Burada, git rm onu depodan ve çalışma dizininden siler. --cached ise Git’te izlemesini bırakır (dolayısıyla push edilmez) ama fiziksel olarak yerinde bırakır.
Tekrar eklenmesini önlemek için .gitignore’a ekleyin:
Özyinelemeli (recursive) anlamına gelir. Tek bir dosya yerine, dizini ve içeriğini özyinelemeli olarak siler. Bunu kullanmadan bir klasörü kaldırmaya çalışırsanız Git hata verir.
Ayrı ayrı git add çalıştırmaya gerek yoktur. Daha temizdir ve silmeyi sahnelemeyi unutmazsınız.
Kısacası:
Manuel silme, Git’in değişikliği algıladığından emin olmak için ek adımlar gerektirir.
Silmeyi sahnelemeyi unutursanız, Git dosyanın var olduğunu düşünmeye devam eder; bu da commit veya birleştirmelerde karışıklığa yol açabilir.
git rm, kasıtlı olarak izlenen dosyaları kaldırırken daha temiz ve daha güvenlidir.
Git’te silinen dosyaları geri yükleme
Bir dosyayı sildiniz ve sonra aslında hâlâ ihtiyacınız olduğunu fark ettiniz diyelim. Sorun değil. Git, hatayı ne zaman fark ettiğinize bağlı olarak onu geri getirmenin birkaç yolunu sunar.
Henüz commit etmediyseniz:
Dosyayı sildiniz ama değişikliği commit etmediniz diyelim. Onu son commit’ten şöyle geri yükleyebilirsiniz:
Git’in eski sürümlerinde yukarıdaki komutu kullanabilirdiniz. Bu komut bir dosyayı belirli bir commit’ten geri yükler, ancak dalları da değiştirebilir.
Git 2.23’ten itibaren bu, iki daha anlaşılır komuta ayrıldı:
git switch (dallar arasında geçiş için)
git restore (dosyaları geri yüklemek için)
Yalnızca bir commit’ten bir dosyayı geri yüklemek istiyorsanız şunu kullanın:
Bu, Git commit’lerinizin, checkout’larınızın, reset’lerinizin ve her şeyin eksiksiz bir geçmişini gösterir.
Ancak git reflog yalnızca yereldir ve uzaklarda çalışmaz. Uzak bir depoyla çalışıyorsanız, o dosyanın geçmişini izlemek için git log -- file.txt kullanmak daha iyidir.
Dosyanın hâlâ mevcut olduğu noktayı bulduğunuzda, önceki gibi git checkout veya git restore ile geri yükleyin.
Git’te Eksik Dosyaları Düzeltme
Bazen dosyalar doğrudan sistemden silinir—belki bir dosya gezginiyle, terminalde rm komutuyla ya da yanlışlıkla. Bu olduğunda, Git kendiliğinden temizleme yapmaz. Bunun yerine o dosyaları eksik olarak işaretler ve kaldırmayı düzgün şekilde ele almanızı bekler.
Böyle bir durumda nasıl hareket etmeniz gerektiğine adım adım bakalım.
<branch-name> yerine main veya dev gibi üzerinde çalıştığınız dalı yazın.
Adım 4: Alternatif olarak
Diyelim ki bir sürü dosyayı manuel olarak sildiniz; belki yanlışlıkla ya da temizlik yaparken. Git, siz söyleyene kadar bu dosyaların var olduğunu düşünür.
git rm ile her birini kaldırmak istemiyorsanız, işleri daha hızlı toparlamanın bir yolu var.
git ls-files --deleted, Git’in izlediği ama artık eksik olan tüm dosyaları listeler.
xargs -0 git rm, bu dosya adlarını git rm’ye aktarır ve Git’in indeksinden kaldırır.
Büyük bir projede çalışırken hızlı bir temizlik yapmak istediğinizde oldukça kullanışlıdır.
Not: Bu mesajı, diskinizde şu anda eksik olan izlenen dosya olmadığı için aldım.
Git’te Gelişmiş Dosya Kaldırma
Artık temelleri ele aldığımıza göre, git rm çalıştırmak kadar basit olmayan daha gelişmiş durumlara bakalım. Bunlar, ya hassas verilerin söz konusu olduğu ya da izlenmeyen dosyaların dikkatlice temizlenmesi gereken durumlar.
Git’ten hassas verileri kaldırma
Bazen API anahtarları veya parolalar gibi özel veriler içeren bir dosya yanlışlıkla commit edilir. Normal şekilde silmek işe yaramaz. Çünkü Git tam bir geçmiş tutar ve dosya önceki commit’lerde hâlâ mevcuttur.
Onu tamamen silmek için git filter-repo komutunu kullanabilirsiniz: git filter-repo (önerilir)
Bu, filter-branch’in daha yeni ve daha iyi bir alternatifidir. Daha hızlı, daha güvenli ve kullanımı daha kolaydır.
Sonra ekip arkadaşlarınıza haber verin. Hatalardan kaçınmak için yerel kopyalarını yeniden klonlamaları veya sıfırlamaları gerekecek.
İzlenmeyen dosyaları git clean ile temizleme
Bunu parçalara ayıralım:
İzlenen dosyalar Git’in geçmişindedir. Bunları kaldırmak için git rm kullanın, ardından commit edin.
İzlenmeyen dosyalar Git’te hiç yoktur. Birikir ve projenizi kalabalıklaştırabilir.
İzlenmeyen dosya veya klasörleri silmek için git clean kullanın.
En kullanışlı seçenekler şunlardır:
git clean -n # Show which untracked files will be removedgit clean -nd # Show which untracked folders will be removedgit clean -fd # Delete all untracked files and folders. It is destructive.Altyapı:
Burada:
-n yalnızca önizleme demektir.
-f zorla sil demektir.
-d temizliğe klasörleri de dahil eder.
Not: git clean izlenen dosyalara dokunmaz. Ancak izlenmeyen her şeyi, tutmak istediğiniz dosyalar olsa bile, siler. Bu yüzden, neleri kaldıracağını görmek için her zaman önce -n kullanın.
GitHub ve GUI Araçlarında Dosya Kaldırma
Şimdiye kadar ele aldığımızın çoğu komut satırını kullanıyor. Ancak herkes böyle çalışmıyor ve bu tamamen normal. Bazı geliştiriciler doğrudan GitHub’da çalışırken görsel araçlar kullanıyor.
O hâlde, GitHub’ın web arayüzünde ve diğer GUI araçlarında dosya silmenin nasıl işlediğine ve bunun komut satırıyla nasıl karşılaştırıldığına bakalım.
Ya da yeni bir dal oluşturup bir çekme isteği (pull request) başlatın (ekip iş akışları için önerilir)
Commit changes’e tıklayın; GitHub dosyayı kaldırır ve silmeyi bir commit olarak kaydeder; tıpkı komut satırında git rm’in yaptığı gibi.
Git GUI araçlarıyla dosya silme
GitHub Desktop, Sourcetree veya Tower gibi bir Git GUI’si kullanıyorsanız işlem de basittir:
Dosyayı dosya gezgininizde ya da uygulama içinde silin.
Uygulama, silmeyi “Changes” veya “File Status” altında gösterir.
Değişikliği inceleyin, sahneleyin ve commit edin.
Her araç biraz farklı görünür ama iş akışı benzerdir: Değişiklikleri görsel olarak takip eder, hazır olduğunuzda commit edersiniz.
Platforma göre en iyi uygulamalar
Farklı platformlarda dosya silme nasıl çalışır ve hangisi ne zaman daha faydalıdır, hızlıca bakalım:
GitHub (Web): Hızlı düzeltmeler ve küçük güncellemeler için iyi. Büyük temizlikler veya hassas dosyalar için kaçının.
Git GUI araçları: Günlük çalışma için harika. Değişiklikleri görmek ve güvenle commit etmek kolaydır.
Komut satırı: En esnek ve yardımcı olanıdır. Toplu düzenlemeler veya geçmiş değişiklikleri gibi ileri seviye görevler için idealdir.
Git Dosya Kaldırma İçin En İyi Uygulamalar
Git’te dosya kaldırmak basit görünebilir, ancak tek bir hata kodunuzu bozabilir. Özellikle paylaşılan veya uzun soluklu projelerde silmelerin güvenli ve kontrollü olmasını sağlamak için kullandığım bazı pratik ipuçları şunlar.
Silmeden önce her zaman doğrulayın
Bir dosyayı kaldırmadan önce, ne yaptığını doğrulamak için bir dakikanızı ayırın:
Durumunu görmek için git status çalıştırın—sahnelenmiş mi, değiştirilmiş mi.
Commit geçmişini kontrol etmek için git log -- <filename> kullanın.
Bu hızlı kontrol, sonradan saatlerce kurtarma çalışması yapmanızı engeller.
Atomik commit’ler kullanın
Atomik commit, mantıksal değişiklik başına bir commit demektir.
Örneğin, kullanılmayan dosyaları siliyorsam, bu silmeleri kod düzenlemelerinden ayrı şekilde commit ederim.
Neden oldukça faydalıdır:
Hata ayıklama kolaylaşır. git bisect gibi araçlar commit’ler küçük ve odaklı olduğunda daha iyi çalışır.
Commit geçmişi temiz ve net kalır.
Kod incelemeleri daha hızlı ilerler.
Geçmiş yeniden yazımlarında dikkatli işbirliği yapın
git filter-repo gibi araçlarla geçmişi yeniden yazmak, ekipteki herkesi etkiler. Kargaşadan kaçınmak için:
Paylaşılan dalları yeniden yazmadan önce iletişim kurun.
Uzak geçmişi yeniden yazdığı için git push --force’u dikkatle kullanın.
Sonrasında ekip arkadaşlarına yerel depolarını yeniden klonlamalarını veya sıfırlamalarını söyleyin.
Yıkıcı komutları çalıştırmadan önce --dry-run kullanın
Dosya silen bir komutu çalıştırmadan önce mutlaka test edin:
Artık dosya "modified" (değiştirildi) olarak görünmeli, "staged" (sahnelenmiş) değil.
Boş klasörleri depoda tutma
Varsayılan olarak Git boş klasörleri yok sayar. İçinde dosya olmayan bir klasörü commit etmeye çalışırsam Git onu atlar.
Ama bazen o klasörü gelecekteki loglar veya yüklemeler için depoda tutmak isterim. Yaygın çözüm .gitkeep adlı yer tutucu bir dosya eklemektir.
Şöyle yaparsınız:
touch logs/.gitkeepgit add logs/.gitkeepgit commit -m "Keep logs folder in the repo"Altyapı:
Bu, klasörü "boş olmayan" hâle getirir; böylece Git onu izler.
Not: .gitkeep Git’e özgü yerleşik bir şey değildir. Sadece bir gelenektir. Dosyayı istediğiniz gibi adlandırabilirsiniz ama .gitkeep başkalarına amacını anlatır.
Git Dosya Kaldırmada Sorun Giderme
Git’te dosya kaldırırken karşılaştığım birkaç yaygın sorun ve çözümleri şunlar.
Dosya uzak depoda hâlâ görünüyor
Dosyayı sildiniz, değişikliği commit ettiniz ama uzak depoda hâlâ duruyor. Belki push etmeyi unuttunuz.
Bu, tüm dosyaları son commit edilmiş hâline döndürür.
Son Düşünceler
Git’te dosya kaldırırken, dikkat etmezseniz hata yapmak kolaydır. Küçük bir hata daha büyük sorunlara yol açabilir: bozulan kod, kaybolan çalışmalar veya ekibinizde karışıklık. Bu yüzden, ne yaptığınızı iki kez kontrol etmek için bir an ayırın.
Duruma uygun komutu kullanın. Bir şeyin ne yapacağından emin değilseniz, önce dry run ile test edin. Ve başkalarıyla çalışıyorsanız, herkesin aynı noktada olduğundan emin olun.
Adım adım ilerleyin. Bu işlerde böyle ustalaşılır.
Git Dosya Kaldırma SSS
“Silmeyi sahnelemek” ne anlama geliyor?⌄
Sahneleme (staging), değişiklikleri bir sonraki commit’inize hazırlamak demektir. git rm filename çalıştırdığınızda, Git dosyayı klasörünüzden siler ve bu silmenin bir sonraki commit’te kaydedilmesini hazırlar. Buna silmenin sahnelenmesi denir. Değişiklik, git commit çalıştırana kadar kalıcı olmaz.
git rm ile rm arasındaki fark nedir?⌄
rm, yalnızca yerel klasörünüzden bir dosyayı siler. Git, siz belirtmedikçe bu değişikliği izlemez.
git rm, dosyayı siler ve bir sonraki commit için silmeyi sahneler; böylece Git, onu depodan da kaldırır.
git push origin ile git push’u ne zaman kullanmalıyım?⌄
Her biri ne zaman kullanılır:
Dalınız zaten bir uzak depoya bağlıysa git push kullanın.
Yeni bir dalı push ederken ya da birden fazla uzak depo olduğunda hangi uzağa push edeceğinizi net belirtmek istediğinizde git push origin kullanın.
git pull ne yapar?⌄
git pull, uzak depodaki en son değişikliklerle yerel dalınızı günceller. Uzak depodan yeni commit’leri getirir ve ardından bunları geçerli dalınıza birleştirir.
Karmaşık konuları basitleştirmeyi seven bir içerik stratejistiyim. Splunk, Hackernoon ve Tiiny Host gibi şirketlerin hedef kitleleri için ilgi çekici ve bilgilendirici içerikler üretmelerine yardımcı oldum.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Temel bilgilerden gelişmiş iş akışlarına kadar Git ile sürüm kontrolünü öğrenin. Değişiklikleri takip edin, depoları yönetin ve verimli bir şekilde işbirliği yapın.
Git’in gelişmiş özelliklerini öğrenin; Veri Bilimi ve mühendislik iş akışlarını karmaşık birleştirmeden büyük ölçekli proje optimizasyonuna kadar hızlandırın.
Git’te dosya kaldırmak her zaman göründüğü kadar basit değildir. Sistemde bir dosyayı silersiniz ama bu, depodan da silindiği anlamına gelmez. Geçmişinizde hâlâ var olabilir ya da daha kötüsü, bir yapılandırma dosyası veya bir API anahtarı gibi, yanlışlıkla commit edilebilir.
Bu kılavuzda, Git’ten dosyaların nasıl kaldırılacağını öğreneceksiniz.
git rmgibi temel komutlarla başlayacak, ardından izlenmeyen dosyaları temizleme ve commit geçmişini düzenleme gibi daha gelişmiş yöntemlere geçeceğiz.Önkoşullar
Git ile dosyaları kaldırmadan önce, her şeyin kurulu olduğundan emin olalım.
Önce, Git yüklü mü kontrol edin. Terminalinizi açıp şunu çalıştırın:
Bir sürüm numarası görüyorsanız, hazırsınız.
Bir sürüm numarası görüyorsanız, hazırsınız.
Görsel bir arayüz tercih ediyorsanız GitHub Desktop, Sourcetree veya GitKraken gibi bir Git GUI’si de kurabilirsiniz. Ancak bu kılavuzda komut satırını (Git Bash) kullanacağım.
Bir ekibin parçasıysanız veya GitHub ya da GitLab gibi uzak bir depoyla çalışıyorsanız, özellikle depoda değişiklik yapma izniniz olduğundan emin olun.
Not: Bazı dosya kaldırma işlemleri geri alınamaz. Bu yüzden, dosyaları silen herhangi bir komut çalıştırmadan önce projenizin yedeğini almak veya en azından deponuzun durumunu iki kez kontrol etmek iyi bir fikirdir.
Her şey tamamsa başlayalım.
Git’te Temel Dosya Kaldırma
Git’te dosya kaldırmanın, yapmak istediğinize bağlı olarak birkaç yolu vardır. Yaygın seçeneklere bakalım:
git rm kullanma
git rmkomutu, dosyaları Git deponuzdan kaldırır. Çalıştırdığınızda iki şey olur:Ancak Git yalnızca dosyayı silmez. Silmeyi geçmişinizde izler. Commit’i yaptığınızda, dosya projeden resmen kaldırılmış olur.
Tek bir dosyayı, çok sayıda dosyayı veya joker karakterler kullanarak bir dosya grubunu kaldırabilirsiniz.
Örneğin, tüm log dosyalarını kaldırmak için:
Bu, klasörde
.logile biten her dosyayı kaldırmasını Git’e söyler. Değişikliği şu komutla doğrulayabilirsiniz:Tek bir git rm komutuyla birden fazla dosyayı silin. Görsel: Yazar.
Bir klasörün içindeki tüm dosyaları, klasörü silmeden kaldırmak mı istiyorsunuz? Şunu kullanın:
Bu, temp klasörünün içindeki her dosyayı, klasörün kendisini silmeden kaldırır.
Git ayrıca bazı güvenlik kontrolleri ekler. Bir dosyada henüz commit edilmemiş değişiklikler varsa, zorlamadığınız sürece Git onu silmez. Bu yüzden bunu yalnızca o değişikliklerin atılabileceğinden eminseniz kullanın:
Tam bir klasörü ve içindekilerin tamamını kaldırmak için
-rbayrağını ekleyin:Bu,
testfolderklasörünü ve içindeki tüm dosyaları kaldırır.Şimdi, değişikliği commit etmek için şu komutu çalıştırın:
Önemli git rm seçenekleri
git rmile en sık kullanacağınız seçenekler şunlardır:1. <filename>
Bu temel kullanımdır. Kaldırmak istediğiniz dosyaları listeleyin:
Aynı türden birden çok dosyayı kaldırmak için de joker karakter kullanabilirsiniz. Örneğin, tüm
.txtdosyalarını kaldırmak için:(Burada
*hepsi demektir..txtile biten herhangi bir dosya adını eşleştirir.)2. --cached
Bu, dosyayı depodan kaldırır ancak bilgisayarınızda bırakır. Diyelim ki yanlışlıkla config.env gibi hassas bir dosyayı ekledim. Depoda olmasını istemiyorum ama makinemde lazım. O zaman şunu çalıştırırım:
Burada,
git rmonu depodan ve çalışma dizininden siler.--cachedise Git’te izlemesini bırakır (dolayısıyla push edilmez) ama fiziksel olarak yerinde bırakır.Tekrar eklenmesini önlemek için
.gitignore’a ekleyin:3. -r
Özyinelemeli (recursive) anlamına gelir. Tek bir dosya yerine, dizini ve içeriğini özyinelemeli olarak siler. Bunu kullanmadan bir klasörü kaldırmaya çalışırsanız Git hata verir.
Burada
testfolderadında bir klasör ve içindea.txtileb.txtadlı iki dosya oluşturdum. Ardından şu komutu çalıştırdım:Bu, klasörü ve içindeki tüm içerikleri ve dosyaları kaldırdı
4.
--dry-runBir dosyayı kaldırınca ne olacağından emin değilseniz,
git rm’i--dry-runseçeneğiyle şöyle kullanın:Bu, neyin kaldırılacağını güvenli şekilde önizlemenin bir yoludur.
Ya da izlenmeyen dosyaları temizlerken nelerin kaldırılacağını iki kez kontrol etmek istiyorsanız, şunu kullanın:
Bu komutun neleri sileceğini yalnızca gösterir.
Karşılaştırmalı İş Akışı Analizi
Git’te bir dosyayı kaldırmanın birden fazla yolu vardır. Yöntemler aynı gibi görünse de davranışları aynı değildir.
git rm vs manuel silme
file.txtadlı bir dosya düşünün. Artık gerekmediğini varsayalım.Bunu kaldırmanın bir yolu, doğrudan sistemden silmektir.
Linux, macOS veya Git Bash’te:
Windows’ta (komut istemi):
Bu, dosyayı klasörünüzden siler. Ancak Git bunu henüz bilmez. Bu yüzden Git’e dosyanın kaldırıldığını elle söylemeniz gerekir:
Bu, silmeyi bir sonraki commit’e dahil edilecek şekilde sahneler.
Birden çok dosyayı sildiyseniz ve hepsini hatırlamıyorsanız, şunu çalıştırabilirsiniz:
Bu, izlenen ve değiştirilmiş veya silinmiş tüm dosyaları sahneler. İzlenmeyen dosyaları içermez.
Şimdi değişikliği commit edersiniz:
git rmkullanırsanız, her şeyi tek adımda halleder. Dosyayı siler ve değişikliği anında sahneler:Ayrı ayrı
git addçalıştırmaya gerek yoktur. Daha temizdir ve silmeyi sahnelemeyi unutmazsınız.Kısacası:
git rm, kasıtlı olarak izlenen dosyaları kaldırırken daha temiz ve daha güvenlidir.Git’te silinen dosyaları geri yükleme
Bir dosyayı sildiniz ve sonra aslında hâlâ ihtiyacınız olduğunu fark ettiniz diyelim. Sorun değil. Git, hatayı ne zaman fark ettiğinize bağlı olarak onu geri getirmenin birkaç yolunu sunar.
Henüz commit etmediyseniz:
Dosyayı sildiniz ama değişikliği commit etmediniz diyelim. Onu son commit’ten şöyle geri yükleyebilirsiniz:
Bu, dosyayı son commit’ten çalışma dizininize geri getirir.
Silmeyi zaten commit ettiyseniz:
Bu da sorun değil. Önce, dosyanın hâlâ mevcut olduğu son commit’i bulun:
Günlüğü inceleyin ve dosyanın hâlâ orada olduğu commit hash’ini kopyalayın. Sonra şunu çalıştırın:
Git’in eski sürümlerinde yukarıdaki komutu kullanabilirdiniz. Bu komut bir dosyayı belirli bir commit’ten geri yükler, ancak dalları da değiştirebilir.
Git 2.23’ten itibaren bu, iki daha anlaşılır komuta ayrıldı:
git switch(dallar arasında geçiş için)git restore(dosyaları geri yüklemek için)Yalnızca bir commit’ten bir dosyayı geri yüklemek istiyorsanız şunu kullanın:
Bu, dosyayı o commit’ten alır ve çalışma dizininize geri koyar.
Dosyanın ne zaman silindiğinden emin değilseniz:
Belki bir sürü değişiklik yaptınız ve dosyanın ne zaman kaybolduğunu hatırlamıyorsunuz. Bu durumda git reflog veya referans günlüğünü kullanın:
Bu, Git commit’lerinizin, checkout’larınızın, reset’lerinizin ve her şeyin eksiksiz bir geçmişini gösterir.
Ancak
git reflogyalnızca yereldir ve uzaklarda çalışmaz. Uzak bir depoyla çalışıyorsanız, o dosyanın geçmişini izlemek içingit log -- file.txtkullanmak daha iyidir.Dosyanın hâlâ mevcut olduğu noktayı bulduğunuzda, önceki gibi
git checkoutveyagit restoreile geri yükleyin.Git’te Eksik Dosyaları Düzeltme
Bazen dosyalar doğrudan sistemden silinir—belki bir dosya gezginiyle, terminalde rm komutuyla ya da yanlışlıkla. Bu olduğunda, Git kendiliğinden temizleme yapmaz. Bunun yerine o dosyaları eksik olarak işaretler ve kaldırmayı düzgün şekilde ele almanızı bekler.
Böyle bir durumda nasıl hareket etmeniz gerektiğine adım adım bakalım.
Adım 1: Eksik dosyaları kontrol edin
Bunu proje klasörünüzde çalıştırın:
Git bir dosyanın silindiğini söylüyorsa, bu onun sisteminizden kaldırıldığı ama değişikliğin henüz sahnelenmediği anlamına gelir.
Adım 2: Silmeyi sahneleyin
Git’e tüm değişiklikleri (silinmiş dosyalar dahil) sahnelemesini söylemek için şunu çalıştırın:
Bu, tüm dosya değişikliklerini sahneler: yeni, değiştirilmiş ve silinmiş. Ardından güncellemeyi commit edin:
Bu, tek seferde her değişikliği yakaladığı için temizlemenin en güvenli yoludur.
Adım 3: Uzağa push edin
Uzak bir depoyla çalışıyorsanız, commit’i push edin:
<branch-name>yerinemainveyadevgibi üzerinde çalıştığınız dalı yazın.Adım 4: Alternatif olarak
Diyelim ki bir sürü dosyayı manuel olarak sildiniz; belki yanlışlıkla ya da temizlik yaparken. Git, siz söyleyene kadar bu dosyaların var olduğunu düşünür.
git rmile her birini kaldırmak istemiyorsanız, işleri daha hızlı toparlamanın bir yolu var.Terminalinizde şu komutu çalıştırın:
Şunu yapar:
git ls-files --deleted, Git’in izlediği ama artık eksik olan tüm dosyaları listeler.xargs -0 git rm, bu dosya adlarınıgit rm’ye aktarır ve Git’in indeksinden kaldırır.Büyük bir projede çalışırken hızlı bir temizlik yapmak istediğinizde oldukça kullanışlıdır.
Not: Bu mesajı, diskinizde şu anda eksik olan izlenen dosya olmadığı için aldım.
Git’te Gelişmiş Dosya Kaldırma
Artık temelleri ele aldığımıza göre,
git rmçalıştırmak kadar basit olmayan daha gelişmiş durumlara bakalım. Bunlar, ya hassas verilerin söz konusu olduğu ya da izlenmeyen dosyaların dikkatlice temizlenmesi gereken durumlar.Git’ten hassas verileri kaldırma
Bazen API anahtarları veya parolalar gibi özel veriler içeren bir dosya yanlışlıkla commit edilir. Normal şekilde silmek işe yaramaz. Çünkü Git tam bir geçmiş tutar ve dosya önceki commit’lerde hâlâ mevcuttur.
Onu tamamen silmek için
git filter-repokomutunu kullanabilirsiniz: git filter-repo (önerilir)Bu,
filter-branch’in daha yeni ve daha iyi bir alternatifidir. Daha hızlı, daha güvenli ve kullanımı daha kolaydır.Önce yükleyin (Python ve pip gerekir):
Sonra şunu çalıştırın:
Bu, deponuzun geçmişindeki her commit’ten
hide.txtdosyasını kaldırır.Doğrulamak için şunu çalıştırın:
Dosya yoksa, tekrar izlenmesini önlemek için
.gitignore’a ekleyin:Bir ekiple çalışıyorsanız, yeniden yazılmış geçmişi temizleyin ve değişiklikleri zorla push edin:
Sonra ekip arkadaşlarınıza haber verin. Hatalardan kaçınmak için yerel kopyalarını yeniden klonlamaları veya sıfırlamaları gerekecek.
İzlenmeyen dosyaları git clean ile temizleme
Bunu parçalara ayıralım:
git rmkullanın, ardından commit edin.İzlenmeyen dosya veya klasörleri silmek için
git cleankullanın.En kullanışlı seçenekler şunlardır:
Burada:
-nyalnızca önizleme demektir.-fzorla sil demektir.-dtemizliğe klasörleri de dahil eder.Not:
git cleanizlenen dosyalara dokunmaz. Ancak izlenmeyen her şeyi, tutmak istediğiniz dosyalar olsa bile, siler. Bu yüzden, neleri kaldıracağını görmek için her zaman önce-nkullanın.GitHub ve GUI Araçlarında Dosya Kaldırma
Şimdiye kadar ele aldığımızın çoğu komut satırını kullanıyor. Ancak herkes böyle çalışmıyor ve bu tamamen normal. Bazı geliştiriciler doğrudan GitHub’da çalışırken görsel araçlar kullanıyor.
O hâlde, GitHub’ın web arayüzünde ve diğer GUI araçlarında dosya silmenin nasıl işlediğine ve bunun komut satırıyla nasıl karşılaştırıldığına bakalım.
GitHub web sitesinde dosya silme
GitHub’ın tarayıcı arayüzünde çalışıyorsanız, terminal kullanmadan dosya silebilirsiniz.
2025 arayüzünde nasıl çalıştığı şöyle:
Ardından GitHub bir commit mesajı kutusu gösterir. Şu gibi kısa bir mesaj ekleyin:
İsteğe bağlı bir açıklama da yazabilirsiniz.
Sonra değişikliği nasıl kaydedeceğinizi seçin:
maindalına commit edinCommit changes’e tıklayın; GitHub dosyayı kaldırır ve silmeyi bir commit olarak kaydeder; tıpkı komut satırında
git rm’in yaptığı gibi.Git GUI araçlarıyla dosya silme
GitHub Desktop, Sourcetree veya Tower gibi bir Git GUI’si kullanıyorsanız işlem de basittir:
Her araç biraz farklı görünür ama iş akışı benzerdir: Değişiklikleri görsel olarak takip eder, hazır olduğunuzda commit edersiniz.
Platforma göre en iyi uygulamalar
Farklı platformlarda dosya silme nasıl çalışır ve hangisi ne zaman daha faydalıdır, hızlıca bakalım:
Git Dosya Kaldırma İçin En İyi Uygulamalar
Git’te dosya kaldırmak basit görünebilir, ancak tek bir hata kodunuzu bozabilir. Özellikle paylaşılan veya uzun soluklu projelerde silmelerin güvenli ve kontrollü olmasını sağlamak için kullandığım bazı pratik ipuçları şunlar.
Silmeden önce her zaman doğrulayın
Bir dosyayı kaldırmadan önce, ne yaptığını doğrulamak için bir dakikanızı ayırın:
git statusçalıştırın—sahnelenmiş mi, değiştirilmiş mi.git log -- <filename>kullanın.Bu hızlı kontrol, sonradan saatlerce kurtarma çalışması yapmanızı engeller.
Atomik commit’ler kullanın
Atomik commit, mantıksal değişiklik başına bir commit demektir.
Örneğin, kullanılmayan dosyaları siliyorsam, bu silmeleri kod düzenlemelerinden ayrı şekilde commit ederim.
Neden oldukça faydalıdır:
git bisectgibi araçlar commit’ler küçük ve odaklı olduğunda daha iyi çalışır.Geçmiş yeniden yazımlarında dikkatli işbirliği yapın
git filter-repogibi araçlarla geçmişi yeniden yazmak, ekipteki herkesi etkiler. Kargaşadan kaçınmak için:git push --force’u dikkatle kullanın.Yıkıcı komutları çalıştırmadan önce --dry-run kullanın
Dosya silen bir komutu çalıştırmadan önce mutlaka test edin:
Bu, hiçbir şey silmeden nelerin silineceğini gösterir. Bunu neden her zaman yapmanız gerektiğini düşünüyorum:
git rm --cached ile .gitignore’u birlikte kullanın
Depoda olmaması gereken bir şeyi (ör. bir yapılandırma dosyası veya loglar) yanlışlıkla commit ettiyseniz, bunu iki adımda düzeltin:
Bu, Git’e dosyayı izlemeyi bırakmasını söyler ama bilgisayarınızda bırakır.
gitignore’a ekleyin:Neden faydalıdır:
.env,.logveyanode_modulesgibi hassas veya yerel dosyaları depodan uzak tutar.Git’te Köşe Durumları: Sahneleme ve Boş Klasörler
Bazen dosya kaldırma beklediğiniz gibi gitmez. Yanlış dosyayı sahneleyebilir veya boş klasörlerle ilgili sorunlar yaşayabilirsiniz.
Yaygın köşe durumlarını şöyle ele alıyorum.
Değişiklikleri kaybetmeden bir dosyanın sahnelenmesini kaldırma
git add .çalıştırdım ve yanlışlıkla sahnelemek istemediğim bir dosyayı sahneledim diyelim. Değişikliklerimi kaybetmek istemiyorum—sadece sahneden kaldırmak istiyorum.Bunu düzeltmek için şunu çalıştırırım:
Bu, dosyanın sahnelenmesini kaldırır ancak düzenlemeleri yerinde tutar.
Doğrulamak için şunu kullanırım:
Artık dosya "modified" (değiştirildi) olarak görünmeli, "staged" (sahnelenmiş) değil.
Boş klasörleri depoda tutma
Varsayılan olarak Git boş klasörleri yok sayar. İçinde dosya olmayan bir klasörü commit etmeye çalışırsam Git onu atlar.
Ama bazen o klasörü gelecekteki loglar veya yüklemeler için depoda tutmak isterim. Yaygın çözüm
.gitkeepadlı yer tutucu bir dosya eklemektir.Şöyle yaparsınız:
Bu, klasörü "boş olmayan" hâle getirir; böylece Git onu izler.
Not:
.gitkeepGit’e özgü yerleşik bir şey değildir. Sadece bir gelenektir. Dosyayı istediğiniz gibi adlandırabilirsiniz ama.gitkeepbaşkalarına amacını anlatır.Git Dosya Kaldırmada Sorun Giderme
Git’te dosya kaldırırken karşılaştığım birkaç yaygın sorun ve çözümleri şunlar.
Dosya uzak depoda hâlâ görünüyor
Dosyayı sildiniz, değişikliği commit ettiniz ama uzak depoda hâlâ duruyor. Belki push etmeyi unuttunuz.
Şu komutu çalıştırdığınızdan emin olun:
Ayrıca şunları kontrol edin:
Alt modüllerle ilgili sorunlar
Alt modüller, başka Git depolarının içinde bulunan Git depolarıdır. Normal klasörler gibi davranmazlar.
Bir alt modül içinde dosya siliyorsanız:
Alt modülü tamamen kaldırıyorsanız:
.gitmodulesve.git/configiçindeki referansları kaldırınAyrık HEAD (Detached HEAD) durumu
Git’te
HEADgenellikle geçerli dalı işaret eder. Bazen ise belirli bir commit’i işaret eder; buna ayrık HEAD denir.Şunları yaparsanız gerçekleşir:
Durumunuzu kontrol edin:
Eğer şunu görürseniz:
Bir dalda değilsiniz ve yaptığınız yeni değişiklikler, başka bir yere geçtiğinizde kaybolabilir.
Bunu şöyle düzeltebilirsiniz:
Değişiklik yaptıysanız ve onları korumak istiyorsanız şunu çalıştırın:
Bu, çalışmalarınızı yeni bir dala koyar ve kaydeder.
Değişiklikleri zaten commit ettiyseniz ve onları sonra başka bir dala taşımak istiyorsanız, şunu yapın:
Hiç değişiklik yapmadıysanız ve yalnızca ayrık HEAD durumundan çıkmak istiyorsanız şunu çalıştırın:
Hepsi bu. HEAD yeniden bağlandı ve her şey normale döndü.
İzin veya durum hataları
Bazen Git bir dosyayı silemez, özellikle Windows’ta. Şu durumlarda olabilir:
Bunu şöyle düzeltin:
Birleştirme veya rebase sorunları
Şuna benzer hatalar görürseniz:
Muhtemelen bir birleştirme veya rebase ortasındasınız.
Çakışmaları çözdükten sonra bir rebase’i bitirmek için:
Rebase veya birleştirmeyi tamamen iptal etmek için:
Bu, deponuzu birleştirme başlamadan önceki hâline döndürür.
Tüm yerel değişiklikleri atmak ve çalışma dizininizi sıfırlamak mı istiyorsunuz?
Şunu deneyin:
Bu, tüm dosyaları son commit edilmiş hâline döndürür.
Son Düşünceler
Git’te dosya kaldırırken, dikkat etmezseniz hata yapmak kolaydır. Küçük bir hata daha büyük sorunlara yol açabilir: bozulan kod, kaybolan çalışmalar veya ekibinizde karışıklık. Bu yüzden, ne yaptığınızı iki kez kontrol etmek için bir an ayırın.
Duruma uygun komutu kullanın. Bir şeyin ne yapacağından emin değilseniz, önce dry run ile test edin. Ve başkalarıyla çalışıyorsanız, herkesin aynı noktada olduğundan emin olun.
Git, dosya silmenin ötesinde çok daha fazlasını yapabilir. Dalları silebilir, reset ve revert ile hataları geri alabilir ya da git diff ile tam olarak nelerin değiştiğini görebilirsiniz. Ne kadar çok öğrenirseniz, iş akışınız o kadar pürüzsüzleşir.
Adım adım ilerleyin. Bu işlerde böyle ustalaşılır.