Git çekme: hata: Giriş foo güncel değil. Birleştirilemez


87

Depomu uzak bir şubeden güncellemeye çalışıyorum ve bir "git çekme" yaptığımda bu hatayı almaya devam ediyorum. Herhangi bir yerel değişiklik yapmadım ve yapmış olsam bile bunları saklamama gerek yok.

Denedim:

git reset --hard

ve ben de aynı sorunu yaşıyorum

İşe yarayan tek şey, rahatsız edici dosyayı silmek ve bir git çekme işlemini tekrar denemek.

Ben de denedim git stashbir takip git pull. Gitme.

düzenleme: PortableGit-1.6.4-preview20090729'u kullanarak sahte hatalar içeren önceki hatalar düzeltilmelidir.


Git.or.cz/gitwiki/GitFaq'daki açıklamanın yardımcı olup olmadığına bakın .
Jakub Narębski

Ditto " İşe yarayan tek şey sorun teşkil eden dosyayı silmek ve bir git çekme işlemini tekrar denemek. " Benim için en az bir dosya git'te değildi; bir joker kuralı tarafından .git işaretlendi. Yine de neden engelleyici olduklarından emin değilim.
2017

3
Bunu çalıştırarak çözebildim git rm --cached learned/tests/temp_funcs.py- Dosyanın İzlenmeyen Dosyalar listesinde kalmasını istediğim için bu durumda engelimigit rm --cached kaldırdım.
Derin

1
Bu bana istediğim bir birleştirme sırasında oldu --abort. Sorun teşkil eden dosyaları silmek dışında önerilen çözümlerden hiçbiri iptal etmeme izin vermedi.
Trevor Reid

Yanıtlar:


56

Bunu düzeltmenin birkaç yolu var ama git stash'in benim için iyi çalıştığını buldum. Yerel değişikliklerinizi geçici olarak başka bir yere koyar. Ardından en son değişiklikleri almak için çekebilirsiniz. Ve sonra yerel değişikliklerinizi geri alabilirsiniz.

Aynen böyle:

$ git pull
...
...
file your_file.rb not up to date, cannot merge.

$ git stash
$ git pull
$ git stash pop

21
Orijinal sorudan: "Ayrıca" git stash "ı ve ardından" git çekme "yi denedim. Gitme."
Charles Wood

Benim için işe yaramadı - benim durumumda git rm --cached, tam yorum yapmak zorundaydım : stackoverflow.com/questions/1248029/…
Derin

39

Bu, dizini belirli dosyaları yok sayacak şekilde güncellerseniz meydana gelebilir:

git update-index --assume-unchanged <file>

ve sonra örneğin başka bir şubeye göz atın:

git checkout <branch>
> error: Entry '<file>' not uptodate. Cannot merge.

Dizin yenilemeye zorlamak sorunu çözer:

git update-index --really-refresh
<file>: needs update

Bunu takiben:

git reset --hard 

Ve sonra her şey normale dönmelidir.


2
Bunu çalıştırarak çözebildim git rm --cached learned/tests/temp_funcs.py- Dosyanın İzlenmeyen Dosyalar listesinde kalmasını istediğim için bu durumda engelimigit rm --cached kaldırdım.
Derin

3
git update-index --really-refreshEksik parçası oldu! Aferin, bulmak zordu
Bernardo Dal Corno

29

Bu tür bir soruna sıklıkla, yalnızca duruma göre farklılık gösteren iki dosya adına sahip bir depodan veri çekmeye çalışmak neden olur. FAT, büyük / küçük harfe duyarlı olmayan modda NTFS (esasen, Windows altında her kullanıldığında) veya büyük / küçük harfe duyarlı olmayan modda HFS + üzerindeyseniz ve "foobar" ve "FOOBAR" olmak üzere iki dosyaya sahipseniz, Git iki farklı dosyaları, ancak dosya sistemi yalnızca birini görecek ve bu da her türlü soruna neden olacaktır. Git, "FOOBAR" diyelim ve sonra "foobar" ı kullanıma alacak ve dosya sistemi bunu sadece "FOOBAR" içeriğini değiştiriyor, ancak yerinde bırakıyor olarak görüyor. Şimdi Git'e göre, "FOOBAR", "foobar" ın içeriğiyle değiştirilmiş ve "foobar" gitmiş görünüyor.

Bu temel sorunun iki farklı tezahürü var. Birincisi, deponuzun gerçekte yalnızca duruma göre farklılık gösteren iki dosya içermesidir. Bu durumda, büyük / küçük harfe duyarlı bir dosya sistemi üzerinde çalışmanız gerekir veya bu tür bir çarpışmanın meydana gelmemesini sağlamak için depoyu düzenlemeniz gerekir; büyük / küçük harf duyarlı olmayan bir dosya sistemi, bu havuzun içeriğini saklayamaz.

Geçici çözüm bulabileceğiniz farklı bir durum, dosyanın büyük / küçük harf durumunu değiştiren bir yeniden adlandırma gerçekleştiği zamandır. Örneğin, Git deposunun "ÖRNEK" den "örnek" e bir yeniden adlandırma içerdiğini varsayalım. Git yeni sürümü kontrol etmeden önce, diskinizdeki mevcut bazı dosyaların üzerine yazmadığından emin olmaya çalışacak. "Örnek" in yeni bir dosya adı olduğunu düşündüğünden, dosya sistemine var olup olmadığını soracak ve dosya sistemi "ÖRNEK" i görecek ve evet diyecektir, bu nedenle Git üzerine yazılacağını düşündüğü için yeni sürümü kontrol etmeyi reddedecektir. izlenmeyen dosyalar. Bu durumda, ilgilendiğiniz hiçbir yerel değişiklik yoksa, basit birgit reset --hard <revision-to-checkout>genellikle sorunu aşmanız ve yeni revizyona geçmeniz için yeterli olacaktır. Yalnızca büyük / küçük harfe duyarlı olmayan bir dosya sistemindeyseniz, bu gibi sorunlara neden olacağından, dosyaları farklı adlarla yeniden adlandırmamaya çalışın.


14

@ Brian Campbell'ın gönderisi hakkında daha fazla ayrıntı için (çünkü zorla sıfırlama da işe yaramadı) beni durduran bir uç duruma işaret etmek istiyorum.

Bir dosyayı OldFilefarklı bir klasöre taşıdım ve yeniden adlandırdım NewFile. Daha sonra dosyayı olarak işaretledim assume-unchanged.

Bu, şubeleri değiştirmemi engelliyordu ve kaydedilecek veya zorlanacak bir zula yoktu. Sorun şu ki, assume-unchangedbayrağı ayarlamadan önce bu dosya değişikliğini yeni bir adla yapmadım . Bu yüzden tekrar ayarladım no-assume-unchanged, taahhüt ettim, sonra tekrar ayarladım assume-unchangedve şubeleri değiştirebildim.


1
Bu cevap beni doğru yola soktu, teşekkürler. "Git ls-files -v | grep '^ [[: lower:]]' | awk '{print $ 2}' | xargs git update-index --no-assume-unchanged" değiştirilmemiş bayrağını sıfırlamak için kullandım , daha sonra hatasız sıfırlamayı başardım.
ocroquette

Sanırım bu aynı zamanda 'değişmediğini varsay' olarak işaretlenmiş herhangi bir dosya için de geçerli, aynı sorunu orijinal adı olan yerel bir dosyadaki değişiklikleri görmezden gelmekle de yaşadım. Yorumunuz bana o dosyayı işaretlediğimi hatırlattı, teşekkürler!
Jake_

5
Bende de aynı sorun var. Temelde "değişmediğini varsaymak" kötü bir özelliktir. Bir kez kullandığınızda, diğer şubeleri kontrol etmeyi ÇOK zorlaştırır. Kullansanız bile checkout -fbaşarısız olur.
John Henckel


12

Benzer bir sorun görüyordum (Windows 10): branchAAçıktım ve gitmek istedim master. Bazı beklenmedik değişikliklerim oldu, bu yüzden önce ben git stashsonra git checkout -f masterama yine de var Entry 'fileName' not uptodate. Cannot merge.

git status taahhüt edecek bir şey göstermiyordu.

Sonunda dosyayı manuel olarak kaldırdım ve diğer şubeye gidebildim (ki bu tabii ki dosyamın geri gelmesini sağladı), bu yüzden git içinde bir yerde bir hata olduğunu tahmin ediyorum.


1
Benim için işe yarayan bu sorunun tek çözümü budur. .gitignoreDosyayla hata alıyordum ! Her ne kadar üzerinde herhangi bir değişiklik yapmamış olsam ve git onu "saklamama" izin vermiyordu (çünkü yerel değişiklik yok, ha!). Bu yüzden .gitignoredosyayı deponun dışına taşıdım (bir çeşit "yedekleme" olarak) ve ardından git reset --harddepoyu sağlıklı bir duruma "sabitleyen" bir a yaptım .
Masked Man

git statusbana hangi dosyanın değiştirildiğini gösterdi ve git restore myFileonu silmek yerine kullanabileceğimi ima etti , hangisi işe yaradı.
Noumenon

7

Dosya izinleriyle ilgili de bir sorun olabilir. Config aksini söylemediği sürece Git de sürümlerini değiştiriyor. Bu cevabı neredeyse benzer problemi olan ancak olmayan insanlar için ekledim.


5

Denemeye değer:

Sadece bu güncelleme için config parametresinicore.trustctime false olarak ayarlayabilir misiniz?

core.trustctime

Yanlışsa, dizin ve çalışan kopya arasındaki ctime farkları yok sayılır; inode değişim zamanı Git dışında (dosya sistemi tarayıcıları ve bazı yedekleme sistemleri) düzenli olarak değiştirildiğinde kullanışlıdır.


2
güzel bul, bu aslında "git reset --merge" çalıştırırken yukarıdaki hata mesajını gördüğümde benim için çalıştı. Bu parametreyi false olarak ayarladığımda, hatadan kurtuldu.
DemitryT

1
"Git merge <feature> --no-ff --no-commit" kullanarak ve sonra "git merge --abort" ile geri dönerek başka bir şubeyle çakışmaları kontrol ederken benim için çalıştı. Xcode, bu durumda "Git'in dışındaki bir şeydi". Yaklaşık 10 yıl sonra teşekkürler!
Ralfonso

@Ralfonso Yaklaşık on yıl sonra, çok hoş geldiniz :)
VonC

2

Cevabımı ekliyorum çünkü diğerlerinden hiçbiri bundan bahsetmiyor. Benim durumumda, bu -Nbayrakla dizine yeni dosyalar ekledikten sonra oldu , bu yüzden içeriklerini eklemeden onları dizine ekledim . Bu durumda, yapmak git stashbu hataya neden olur.


0

Bir durumdan sonra, aynı hata vardı git statusdedi new file: foo.cppbir dosya için değil evreleme alanına eklenir. yani "Kaydetme için hazırlanmayan değişiklikler" başlığı altında. Çok tuhaf, bu genellikle olmaz.

Çözüm: git add foo.cppve sonra git stashtekrar çalıştı.


0

Git merge --abort yapmaya çalışıyordum. Git restore your_file komutu benim için sorunu çözdü

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.