Git “would be overwritten by merge” hatası, uzak depodan gelen değişikliklerin bilgisayarındaki henüz commit edilmemiş değişikliklerle aynı dosyada kesişmesi nedeniyle oluşur. Git, çalışma dizinindeki yerel içeriğin üzerine uzaktaki sürümü yazarak yaptığın düzenlemeyi kaybetme riskini önlemek için git pull veya git merge işlemini durdurur.
Commit edilmemiş değişiklik, dosyada yaptığın ancak henüz bir commit içine kaydetmediğin düzenlemedir. Çalışma dizini ise proje klasöründe açıp düzenlediğin dosyaların bilgisayarındaki mevcut hâlidir.
Hata neden çıkar ve listelenen dosyalar ne anlatır?
Hata, uzak depodaki güncellemenin çalışma dizinindeki aynı dosyanın üzerine yazma ihtimali olduğunda çıkar. Git, iki değişikliği otomatik olarak birleştirmeden önce yerel düzenlemeni korumayı tercih eder.
Örneğin iki bilgisayarda aynı README.md dosyası üzerinde çalıştığını düşünelim. Birinci bilgisayarda dosya düzenlenip commit edilir ve uzak depoya gönderilir:
git add README.md
git commit -m "README açıklamasını güncelle"
git push
İkinci bilgisayarda ise README.md üzerinde yeni bir düzenleme yapılır, fakat bu değişiklik commit edilmez. Ardından uzak depodaki güncellemeyi almak için şu komut çalıştırılır:
git pull
Git, uzak depodaki ve çalışma dizinindeki değişiklikler aynı dosyada kesiştiği için işlemi durdurabilir. Terminalde görülen hata özeti şöyledir:
error: Your local changes to the following files would be overwritten by merge:
README.md
Please commit your changes or stash them before you merge.
Aborting
Your local changes to the following files would be overwritten by merge satırı, bilgisayarındaki yerel değişikliklerin merge sonucunda üzerine yazılabileceğini belirtir. Altındaki README.md satırı ise Git’in bu riski hangi dosyada tespit ettiğini gösterir. Dosyanın bozulduğu ya da deponun kullanılamaz hâle geldiği anlamına gelmez.
Please commit your changes or stash them before you merge önerisi üç seçeneğe işaret eder. Değişikliği korumak istiyorsan commit edebilirsin, geçici olarak kenara almak istiyorsan stash kullanabilirsin, gerçekten gereksizse yerel değişikliği geri alabilirsin. Hangi seçeneğin doğru olduğuna karar vermeden önce mevcut durumu git status ile incelemek gerekir.
Komut çalıştırmadan önce git status nasıl okunur?

git status komutu, mevcut dalı, çalışma dizinindeki değişiklikleri ve Git’in bir sonraki adım için beklediği durumu gösterir. Hata aldıktan sonra önce bu komutu çalıştırarak hangi dosyanın değiştiğini kontrol et:
git status
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit
modified: README.md satırı, dosyanın son commit hâlinden farklı olduğunu ve değişikliğin henüz staging alanına alınmadığını gösterir. Bu aşamada doğrudan yeniden git pull çalıştırmak aynı hatanın tekrarlanmasına yol açabilir.
- Değişiklik korunacaksa commit yolunu seç.
- Değişiklik geçici ise stash ile kenara al.
- Değişiklik gerçekten gereksizse restore kullan.
| Komut | Gözlenen durum | Güvenli sonraki adım |
|---|---|---|
git status |
Değişen dosyaları ve mevcut dalı gösterir. | Karar vermeden önce ve her işlemden sonra yeniden çalıştır. |
git add ve git commit |
Değişiklik korunmak isteniyor. | Commit işleminden sonra git status ile çalışma dizinini kontrol et. |
git stash |
Değişiklik geçici olarak saklanacak. | Stash sonrasında git status çalıştır, ardından uzak değişiklikleri al. |
git restore |
Yerel değişiklik gereksiz ve silinebilir. | Restore sonrasında git status ile dosyanın temizlendiğini doğrula. |
Değişiklikleri commit ederek git pull nasıl yapılır?
README.md üzerindeki düzenlemen projenin kalıcı bir parçası olmaya hazırsa değişikliği commit edip ardından uzak depodaki güncellemeleri alabilirsin. Önce dosyanın içeriğini ve commit'e nelerin ekleneceğini kontrol et.
Bir bilgisayarda README.md dosyasına kurulum açıklaması eklediğini, diğer bilgisayarda ise aynı dosyanın güncellenip uzak depoya gönderildiğini varsayalım. Aşağıdaki çıktı parçaları temsilidir; dal adı, commit kimliği ve diğer ayrıntılar depoya göre değişir.
$ git status --short
M README.md
$ git diff -- README.md
-Eski kurulum açıklaması
+Yeni kurulum açıklaması
$ git add README.md
$ git status --short
M README.md
$ git commit -m "README kurulum açıklamasını güncelle"
$ git status --short
İlk durum çıktısındaki M, dosyada henüz hazırlama alanına alınmamış bir değişiklik olduğunu gösterir. git add sonrasındaki M ise değişikliğin commit için hazırlandığını belirtir. Son git status --short komutunun çıktı vermemesi, bu örnekte çalışma dizininde gösterilecek değişiklik kalmadığı anlamına gelir.
Commit mesajını yaptığın değişikliği anlatacak şekilde seç. Ardından uzak dalı almak için şu komutları çalıştır:
$ git pull
$ git status
Yerel ve uzak dallarda ayrı commit'ler oluştuğundan Git, yapılandırmaya bağlı olarak bunların nasıl birleştirileceğini belirtmeni isteyebilir. Projende birleştirme yöntemi uygunsa git pull --no-rebase kullanabilirsin. Git değişiklikleri otomatik birleştirebilir veya çatışma bildirerek senden dosyayı düzenlemeni isteyebilir.
Bu çatışma, başlangıçtaki üzerine yazılma uyarısından farklıdır: İlk durumda Git, commit edilmemiş çalışmanı korumak için işlemi durdurur. Birleştirme çatışmasında ise kaydedilmiş değişiklikler bir araya getirilirken hangi içeriğin kullanılacağına karar vermen gerekir.
Git stash ile değişiklikleri pull sonrasına nasıl taşırsın?

README.md değişikliğin henüz commit'e hazır değilse git stash ile geçici olarak saklayabilir, uzak güncellemeleri aldıktan sonra geri uygulayabilirsin. Bu örnekte README.md dosyasının Git tarafından zaten takip edildiğini ve çalışma dizinindeki tek değişikliğin bu dosyada olduğunu varsayıyoruz.
$ git status --short
M README.md
$ git stash
$ git status --short
$ git pull
$ git status --short
$ git stash pop
$ git status --short
git stash sonrasındaki boş durum çıktısı, örnekte saklanan değişikliklerin çalışma dizininden kaldırıldığını gösterir. git pull başarıyla tamamlandıktan sonra git stash pop adımını unutma; sakladığın düzenlemeyi güncellenmiş dosyaya bu komutla geri uygularsın. Başarılı uygulama sonrasında son durum çıktısında yeniden M README.md görebilirsin.
Uzak güncelleme ile saklanan düzenleme aynı satırlara dokunuyorsa git stash pop çatışmayla durabilir. Böyle bir durumda git status, README.md dosyasını Unmerged paths altında gösterebilir. Dosyayı açıp <<<<<<<, ======= ve >>>>>>> işaretleri arasındaki içerikleri incele; korunacak satırları seçip işaretleri kaldır.
$ git add README.md
$ git status
Bu komutlar çözülmüş dosyayı hazırlama alanına alır ve kalan durumu kontrol etmeni sağlar. Çatışmalı bir stash pop işleminde saklanan kayıt otomatik silinmez; içeriği geri aldığından emin olduktan sonra git stash list ile kayıtları inceleyebilirsin.
İstenmeyen değişiklikler git restore ile nasıl silinir?
README.md dosyasındaki yerel değişikliklere artık ihtiyacın yoksa git restore README.md komutuyla dosyanın çalışma dizinindeki hâlini geri alabilirsin. Komutu çalıştırmadan önce silinecek içeriği incele ve gerçekten korumak istemediğinden emin ol.
Uyarı: Değişiklikler commit edilmediyse, stash içine alınmadıysa veya başka bir yerde kopyalanmadıysa bu işlemi geri dönüşsüz kabul et. Emin olmadığın bir içerik varsa önce bir kopyasını sakla.
Önce deponun durumuna ve README.md içindeki değişikliklere bak:
git status
git diff -- README.md
Örneğin git status çıktısında dosya Changes not staged for commit altında görünüyorsa, git diff henüz hazırlama alanına eklenmemiş değişiklikleri gösterir. Dosyada hazırlama alanına alınmış değişiklikler de varsa onları git diff --staged -- README.md ile ayrıca inceleyebilirsin.
İncelediğin çalışma dizini değişikliklerini silmek istiyorsan şu komutu çalıştır ve durumu yeniden kontrol et:
git restore README.md
git status
git restore, bu kullanımda README.md dosyasını hazırlama alanındaki içeriğe döndürür. Hazırlama alanına alınmış değişiklikler varsa onları silmez; dolayısıyla dosya son commit’teki hâliyle aynı olmak zorunda değildir.
README.md dışında değişiklik yoksa ve dosyada hazırlanmış bir değişiklik bulunmuyorsa, git status çıktısında nothing to commit, working tree clean mesajını görebilirsin. Ardından git pull komutunu yeniden deneyip sonucu git status ile kontrol edebilirsin.
Dikkat: İnternette karşılaşabileceğin git reset --hard, tek bir dosyanın istenmeyen çalışma dizini değişikliklerini temizlemekten daha geniş sonuçlar doğurabilir ve yerel verilerin kaybına yol açabilir. Kapsamını ve sonucunu anlamadan bu komutu çalıştırma.
Hangi çözümü seçmeli ve işlem sonunda ne kontrol edilmeli?
Çözümü seçerken yerel değişikliğin korunup korunmayacağına ve çalışmanın tamamlanıp tamamlanmadığına bak. Kalıcı ve anlamlı bir değişikliği commit edebilir, henüz tamamlamadığın çalışmayı geçici olarak stash içine alabilir, artık gerekmediğinden emin olduğun değişikliği ise restore ile silebilirsin.
| Yerel değişikliğin durumu | Uygun yol | Son güvenlik kontrolü |
|---|---|---|
| Korunacak ve commit edilmeye hazır | Commit | Commit sonrası durumu ve dosya içeriğini gözden geçir. |
| Korunacak, ancak henüz tamamlanmamış | Stash | Pull sonrasında değişikliklerin geri getirildiğini kontrol et. |
| Yanlışlıkla yapılmış ve artık gerekmiyor | Restore | Silinecek içeriği önceden incele, ardından dosyanın durumunu kontrol et. |
İşlem tamamlandığında aşağıdaki kontroller, README.md üzerinde çalışmaya hangi içerikle devam ettiğini görmene yardımcı olur:
git statusçıktısının temiz olduğunu veya yalnızca beklediğin değişiklikleri gösterdiğini kontrol et.- README.md dosyasını açıp hem uzak depodan gelen hem de korumak istediğin yerel içeriği gözden geçir.
- Stash kullandıysan ilgili değişiklikleri geri getirdiğini doğrula.
git stash popadımını unutursan çalışman stash içinde kalabilir ve dosyada görünmeyebilir. - Çatışma oluştuysa dosyayı düzenle, çatışma işaretlerini temizle ve çözülen dosyayı
git add README.mdile hazırlama alanına ekle. Ardındangit statusçalıştır.
Sık Sorulan Sorular
“Your local changes to the following files would be overwritten by merge” hatası neden git pull sırasında çıkar?
Git, pull sırasında birleştirilecek değişikliklerin listelenen dosyalardaki yerel düzenlemelerin üzerine yazabileceğini belirlediğinde işlemi durdurur. Yerel çalışmayı korumak veya gözden çıkarıp çıkarmayacağına karar vermek için önce git status ve git diff çıktısını inceleyebilirsin.
git stash ile kenara alınan değişiklikler git pull sonrasında nasıl geri getirilir?
Pull tamamlandıktan sonra git stash pop komutuyla en son stash kaydını çalışma dizinine uygulayabilirsin. Birden fazla kayıt varsa önce git stash list ile kayıtları incele ve doğru çalışmayı geri getirdiğinden emin ol.
git stash pop sırasında çatışma oluşursa hangi adımlar izlenir?
Çatışma oluşursa git status ile etkilenen dosyaları bul, içeriklerini düzenle ve çatışma işaretlerini kaldırdıktan sonra dosyaları git add ile işaretle. git stash pop çatışmayla sonuçlandığında stash kaydı listede kalır; değişiklikleri kontrol ettikten sonra artık gerekmediğinden eminsen ilgili kaydı silebilirsin.
git restore ile silinen commit edilmemiş değişiklikler geri alınabilir mi?
Commit edilmemiş, stash içine alınmamış ve başka bir yerde kopyası tutulmamış değişikliklerin geri getirileceğine güvenemezsin. Bu yüzden git restore öncesinde değişiklikleri incelemek ve gerekiyorsa bir kopya almak önemlidir.
git status komutu Git işlemlerinin hangi aşamalarında çalıştırılmalı?
git status komutunu değişikliklere müdahale etmeden önce, commit veya stash sonrasında, pull işleminden sonra ve varsa çatışmaları çözdükten sonra çalıştırabilirsin. Böylece her adımda dosyaların ve hazırlama alanının beklediğin durumda olup olmadığını kontrol edebilirsin.
Hangi yolu seçersen seç, devam etmeden önce README.md içeriğini ve deponun son durumunu kontrol etmek için zaman ayır.