Last chance! 50% off DataCamp Premium
Sale ends in
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.
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:
git --versionBir 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 dosya kaldırmanın, yapmak istediğinize bağlı olarak birkaç yolu vardır. Yaygın seçeneklere bakalım:
git rm komutu, 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.
git rm file1.txt
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:
git rm *.logBu, klasörde .log ile biten her dosyayı kaldırmasını Git’e söyler. Değişikliği şu komutla doğrulayabilirsiniz:
git status
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:
git rm temp/*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:
git rm -f
Tam bir klasörü ve içindekilerin tamamını kaldırmak için -r bayrağını ekleyin:
git rm -r testfolderBu, testfolder klasö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:
git commit -m "removed log files”
git rm ile en sık kullanacağınız seçenekler şunlardır:
Bu temel kullanımdır. Kaldırmak istediğiniz dosyaları listeleyin:
git rm file1.txt file2.txtAynı türden birden çok dosyayı kaldırmak için de joker karakter kullanabilirsiniz. Örneğin, tüm .txt dosyalarını kaldırmak için:
git rm *.txt(Burada * hepsi demektir. .txt ile biten herhangi bir dosya adını eşleştirir.)
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:
git rm --cached config.envBurada, 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:
echo config.env >> .gitignore
Ö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.
git rm -r <folder-name>Burada testfolder adında bir klasör ve içinde a.txt ile b.txt adlı iki dosya oluşturdum. Ardından şu komutu çalıştırdım:
git rm -r testfolderBu, klasörü ve içindeki tüm içerikleri ve dosyaları kaldırdı

--dry-runBir dosyayı kaldırınca ne olacağından emin değilseniz, git rm’i --dry-run seçeneğiyle şöyle kullanın:
git rm --dry-run <filename>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:
git clean -nBu komutun neleri sileceğini yalnızca gösterir.

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.
file.txt adlı 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:
rm file.txtWindows’ta (komut istemi):
del file.txt
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:
git add file.txtBu, silmeyi bir sonraki commit’e dahil edilecek şekilde sahneler.

Birden çok dosyayı sildiyseniz ve hepsini hatırlamıyorsanız, şunu çalıştırabilirsiniz:
git add -uBu, izlenen ve değiştirilmiş veya silinmiş tüm dosyaları sahneler. İzlenmeyen dosyaları içermez.
Şimdi değişikliği commit edersiniz:
git commit -m "Remove file.txt"git rm kullanırsanız, her şeyi tek adımda halleder. Dosyayı siler ve değişikliği anında sahneler:
git rm file.txtgit commit -m "Remove file.txt"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.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 restore file.txtBu, 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:
git log -- file.txtGünlüğü inceleyin ve dosyanın hâlâ orada olduğu commit hash’ini kopyalayın. Sonra şunu çalıştırın:
git checkout <commit hash> -- file.txtGit’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:
git restore --source=<commit-hash> --file.txtBu, 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:
git reflogBu, 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.
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.
Bunu proje klasörünüzde çalıştırın:
git status
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.
Git’e tüm değişiklikleri (silinmiş dosyalar dahil) sahnelemesini söylemek için şunu çalıştırın:
git add -ABu, tüm dosya değişikliklerini sahneler: yeni, değiştirilmiş ve silinmiş. Ardından güncellemeyi commit edin:
git commit -m "Removed missing files"
Bu, tek seferde her değişikliği yakaladığı için temizlemenin en güvenli yoludur.
Uzak bir depoyla çalışıyorsanız, commit’i push edin:
git push origin <branch-name><branch-name> yerine main veya dev gibi üzerinde çalıştığınız dalı yazın.
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.
Terminalinizde şu komutu çalıştırın:
git ls-files --deleted -z | xargs -0 git rmŞ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.
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.
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.
Önce yükleyin (Python ve pip gerekir):
pip install git-filter-repoSonra şunu çalıştırın:
git filter-repo --path hide.txt --invert-pathsBu, deponuzun geçmişindeki her commit’ten hide.txt dosyasını kaldırır.
Doğrulamak için şunu çalıştırın:
git log --all -- supersecrets.txtDosya yoksa, tekrar izlenmesini önlemek için .gitignore’a ekleyin:
echo hide.txt >> .gitignoreBir ekiple çalışıyorsanız, yeniden yazılmış geçmişi temizleyin ve değişiklikleri zorla push edin:
git push origin --force --allSonra ekip arkadaşlarınıza haber verin. Hatalardan kaçınmak için yerel kopyalarını yeniden klonlamaları veya sıfırlamaları gerekecek.
Bunu parçalara ayıralım:
git rm kullanın, ardından commit edin.İ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.
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.
Ş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’ı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:
Delete practice.pyİsteğe bağlı bir açıklama da yazabilirsiniz.
Sonra değişikliği nasıl kaydedeceğinizi seçin:
main dalı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.
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.
Farklı platformlarda dosya silme nasıl çalışır ve hangisi ne zaman daha faydalıdır, hızlıca bakalım:
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.
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, 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 bisect gibi araçlar commit’ler küçük ve odaklı olduğunda daha iyi çalışır.git filter-repo gibi araçlarla geçmişi yeniden yazmak, ekipteki herkesi etkiler. Kargaşadan kaçınmak için:
git push --force’u dikkatle kullanın.Dosya silen bir komutu çalıştırmadan önce mutlaka test edin:
git clean -nBu, hiçbir şey silmeden nelerin silineceğini gösterir. Bunu neden her zaman yapmanız gerektiğini düşünüyorum:
Depoda olmaması gereken bir şeyi (ör. bir yapılandırma dosyası veya loglar) yanlışlıkla commit ettiyseniz, bunu iki adımda düzeltin:
git rm --cached <filename>Bu, Git’e dosyayı izlemeyi bırakmasını söyler ama bilgisayarınızda bırakır.
gitignore’a ekleyin:echo <filename> >> .gitignoreNeden faydalıdır:
.env, .log veya node_modules gibi hassas veya yerel dosyaları depodan uzak tutar.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.
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:
git reset HEAD <filename>Bu, dosyanın sahnelenmesini kaldırır ancak düzenlemeleri yerinde tutar.
Doğrulamak için şunu kullanırım:
git statusArtık dosya "modified" (değiştirildi) olarak görünmeli, "staged" (sahnelenmiş) değil.
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"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’te dosya kaldırırken karşılaştığım birkaç yaygın sorun ve çözümleri şunlar.
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:
git push origin <branch-name>Ayrıca şunları kontrol edin:
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:
.gitmodules ve .git/config içindeki referansları kaldırınGit’te HEAD genellikle 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:
git statusEğer şunu görürseniz:
HEAD detached at <commit-hash>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:
git checkout -b <new-branch-name>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:
git checkout -b temp-branch # from detached HEADgit checkout main # or another target branchgit merge temp-branchHiç değişiklik yapmadıysanız ve yalnızca ayrık HEAD durumundan çıkmak istiyorsanız şunu çalıştırın:
git checkout <branch-name> Hepsi bu. HEAD yeniden bağlandı ve her şey normale döndü.
Bazen Git bir dosyayı silemez, özellikle Windows’ta. Şu durumlarda olabilir:
Bunu şöyle düzeltin:
Ş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:
git rebase --continueRebase veya birleştirmeyi tamamen iptal etmek için:
git reset --mergeBu, 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:
git restore .Bu, tüm dosyaları son commit edilmiş hâline döndürür.
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.
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.
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.
Her biri ne zaman kullanılır:
git push kullanın. git push origin kullanın.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.
En İyi DataCamp Kursları
Program
Kurs
Kurs

blog
Abid Ali Awan
14 dk.
blog
Dario Radečić
15 dk.
Eğitim
Kurtis Pykes
8 dk.
Eğitim
Adel Nehme