Çok aşamalı girişler için git'te önemli bir hata oluşuyor


241

Git sürüm 2.2.0'ı OS X üzerinde birlik oyun motoru ile kullanmak ve kodumu taahhüt etmek istedim. Her şeyi ekledim ve bir hata mesajı almadım. sonra -m komutunu verin ve şu hata iletisini aldı:

fatal: multiple stage entries for merged file 'Assets/Prefabs/Resources'

Fark etmedim, ittim, bu bir hata mesajı vermedi, aslında dedi Everything up-to-date Bitbucket'i kontrol ettim (repo tutulduğu yer) ve benim taahhüdümü göstermedi. bu yüzden yerel günlüğümü kontrol ettim ve bu da benim taahhüdümü göstermiyor.

Bir cevap için Google'a baktım ... ve hiçbir şey. bu hata nedir? ve nasıl düzeltebilirim?


Git'in hangi sürümünü veya aracını kullanıyorsunuz? Geliştiriciler listesinde, çok aşamalı girişlerin denetlenmesini iyileştirme konusunda yeni bir iş parçacığı var. news.gmane.org/gmane.comp.version-control.git
Philip Oakley

2.2.0'daki ekstra kontrolün yapılması muhtemel görünmektedir. "Birleştirilmemiş girişlerin kaldırıldığından emin olun" 12 Ağu Jaime Soriano Pastor tarafından, başlamak için bir iş parçacığı olabilir.
Philip Oakley

4
peki bu neden oluyor?
Charlie Parker

sadece söz konusu dosyada kukla bir düzenleme yapın ve 'kaydet ve senkronize et'.
sajanyamaha

Yanıtlar:


381

Git son sürümlerinde çalışmak gibi görünüyor ilk geçici çözüm, (2.3+, Q2 + 2015) belirtilen hibe 'ın daha yukarı güncel cevap :

  1. Dizini sil

    $ rm .git/index
    
  2. Hepsini ekle

    $ git add -A
    
  3. işlemek

    $ git commit -a
    

Orijinal cevap (2014 sonu)
Genel çözüm:

  • Uzak repoyu yeni bir yerel repoya tekrar kopyalayın
  • ilk repodaki değişiklikleri ikinci repoya ekleyin:

    $ cd /patH/to/second/cloned/repo
    $ git --work-tree=/path/to/first/repo add .
    

Bu hata iletisini read-cache.c, bu düzeltme read-cache.cekinde ele alınan (" : Birleştirilmemiş girişlerin kaldırıldığından emin olun ") ve Git 2.2 işleminde tanıtılan bu hata iletisini görebilirsiniz .
Bu yüzden son olduğundan, olması mümkündür geçersiz kılınması olduğunu yama etkilenmeyecektir için 2.1'e Git yeterli olacaktır.

OP Daniel Toebe ekler yorumlarda :

Sorun, üzerimde başarısız olmaya karar veren macbook'umda oldu ve başka bir bilgisayar aksilik, projelerimde beni geride bıraktı.


@sharpner, bu hatanın sizin durumunuzda bir hata veya bir yan etkisi olması mümkündür.
VonC

1
Geciken yanıt için özür dilerim ... Sorun benim üzerimde başarısız olmaya karar veren macbook'umda oldu ve başka bir bilgisayar aksilikleri beni projelerimde geride bıraktı.
Daniel Toebe

1
@DanielToebe iyi geribildirim. Daha fazla görünürlük için cevaba ekledim.
VonC

Bir denemeden sonra aynı işe başladımgit commit -c sha
Chris Leishman

2
Herhangi bir ilgilenen için, yanlışlıkla bana .git klasöründe dosyanın kendisi yerine bir dosya düzenleme oldu çünkü bu oldu.
ostler.c

166

Değişiklikler ekleyip işlediğimden ve daha önce işlediğim bir dosyayı sildiğim için bu sorunla karşılaştığımı düşünüyorum. Bu sizin durumunuza benziyorsa, yeniden klonlama ve değişikliklerinizi manuel olarak eklemek için aşağıdakileri izlemenizi öneririz.

Depomda .git / index dosyasını siler ve slider'ın önerdiğine benzer şekilde silerek bu sorunu giderebildim (yolun yanlış yazıldığına inanıyorum).

rm .git/index

Sonra tekrar yerel değişikliklerimi eklemek ve uygulamak zorunda kaldım

git add -A
git commit -m "..."

Daha sonra uzaktan itebildim.

Git endeksi nedir ve nasıl ilgilidir?

Git Endeksi ile Anlaşma Nedir?

Git “index”, git deposuna kaydedilmesini istediğiniz dosyaları yerleştirdiğiniz yerdir.

Dosyaları git deposuna “teslim etmeden” (iade etmeden) önce dosyaları git “dizinine” koymanız gerekir.

Bu dosyayı silerek git'in repoyu yeniden endeksleyeceğine, yeni bir tane oluşturacağına ve gitmeye hazır olduğuna inanıyorum. Bu sorun, yerel depo tüm yaygara neden silinen dosya olmadan yeniden endekslendi çünkü bu sorunu çözer.

Düzenleme: Bu Mac ile ilgili gibi görünüyor (yorumlara dayanarak) bu yüzden OSX 10.10 ve git sürüm 2.3.4 demlemek ile yüklü yardımcı olur.


1
Yay, bu işe yaradı ve açıklama için teşekkür ederim. Buradaki bir uyarı, bunu yapmadan önce, geçerli varsayılan değişiklik listesini eklemediğiniz dosyaları saklamak veya taşımak veya silmektir. Onlar ile emilirgit add -A
Kirby

4
Bunu Mac OS X Yosemite'de onaylayın. Belirli bir tekrarlanabilir senaryo olmasa da Android Studio'da çalışırken oldu
Drew

4
Bu doğru cevap olmalı çünkü çalışıyor ve daha iyi bir açıklaması var. Bu da benim başıma geldi.
Jared Burrows

1
Benim için de çalıştı. IntelliJ'de sürüm kontrolü kökü eklemek onu şaşırttı, ancak git dizinini çalıştırmak iyi çalıştı. @Grant açıklaması için teşekkürler.
Andrew Eells

1
Ayrıca vim ile bazı değişiklikler yaparken IntelliJ arka planda çalışırken bu sorunu yaşadım. Sanırım içinde bir yarış durumu vardı git. (Aslında, birçoğu olduğunu düşünüyorum.) IntelliJ'i kapatmak, dizini kaldırmak ve işimi yeniden yürütmek gayet işe yaradı.
Robert Fischer

119

Proje için

rm .git/index
git reset

dizini sildikten sonra git reset ile yeniden oluşturmanız gerekir

Alt modül için:

Ana proje klasörüne git

rm .git/modules/your_project_structure/index
git reset --hard HEAD

4
Dizin kaldırıldıktan sonra git sıfırlama tamamen çivilenmiştir. Teşekkürler! Sıfırlamazsanız, her dosya dizinde yeni olacak, bu yüzden eklenmelidir. Sıfırlama işlemi, göründüğü dizini yeniden oluşturur. Git nasıl bir indeks olmadan, indeksi yeniden inşa edebilirsiniz anlamıyorum olsa da?
JosFabre

1
@JosFaber Çünkü dizin kaydedilen geçmiş değil. Aslında "gereksiz" yardımcı yapıdır. Bkz schacon.github.io/gitbook/7_the_git_index.html tamamen olmak işçi ağacı ve HEAD karşılaştırarak yeniden edebilecek. Ve tam olarak git reset bunu yapıyor. Man page diyor ki: ... <tree-ish> dizininden dizine kopya girişlerini sıfırla ...
farincz

2
Teşekkür ederim! Git sıfırlama olmadan, zaten depoda bulunan tüm dosyaları yeniden eklememi istedi.
Robert Bernstein

1
Mac bilgisayarımda sourcetree kullanıyorum. .Git / dizinini manuel olarak sildim, sonra son iyi taahhüdü seçtim, sağ tıkladım, seçilen sıfırlama master'ı (benim durumumda) bu yoruma - sonra çalışmamı iyi durumda bırakan karışık seçeneği seçtim. Daha sonra mevcut işimi yapmayı başardım ve şimdi her şey sağlıklı.
user216661

1
En temiz ve en hızlı yol!
16:16

29

Git dizin dosyasını projenizden kaldırabilirsiniz. Projenizin kök dizininde aşağıdaki komutu çalıştırın:

rm .git/index

Bundan sonra git.


3
Bu soruya cevap vermiyor. Lütfen bu cevabı daha fazla ayrıntıyla açıklayın.
ArtOfCode

Benim için çalışmadı rm: /.git/index: No such file or directoryMac OSX Yosemite; git 2.3.4 homebrew aracılığıyla yüklenen
hibe

@grant Eğik çizgiyi başlangıçta kaldırmanız gerekir. ( rm .git/indexgit dizininizde).
ChristophLSA

2
@ChristophLSA teşekkür ederim - Bu eylemin netlik sağlamak için ne yaptığını açıklayarak cevap verdim. Bu cevap uygun yolu yansıtacak ve kullanıcılara eylemin ne yaptığını bildirecek şekilde güncellenebilir mi?
hibe

1
Bunun neden işe yaradığını biliyorum. Sorun bozuk bir dizinden kaynaklanıyor. Komut satırında bir tamamlama iletisi yazarken IntelliJ kodu değiştirerek dizini bozduğumda bu sorunla karşılaştım. Dizini silmek değişikliklerinizi yok etmez, sadece onları etkisiz hale getirir.
Pirolistik

3

Farklı bir çözüm deniyorum ve bu benim için işe yarıyor. Aşağıda seçeneklerim

#cd .git
#rm index
#cd ..
#git add .

@ farincz dediği gibi, git resetaksi takdirde size verir arayarak dizini yeniden yeniden oluşturmanız gerekir fatal: Could not reset index file to revision 'HEAD' .
kuskmen

1

Bu bir alt modülde olursa

Dizin dosyası üst .gitdizinin içinde bulunur :

.git/modules/your_project_structure/index

Bir alt modülde, .git(en azından üzerinde çalıştığım projede) adlı bir dizin yoktur , yalnızca .gitbu projenin git dizinini nerede arayacağınızı söyleyen bir dosya vardır.

Git durumu, yapmadığım değişiklikleri gösteriyor

Dizin dosyalarını kaldırdıktan ve bir yaptıktan sonra git reset, kendimi birçok açıklanamayan değişiklikle karşı karşıya buldum ve sert bir sıfırlama yardımcı olmadı.

Uyarı Eğer bu yüzden onları işlemek ve devam etmeden önce itin tüm değişiklikleri kaybedeceksiniz.

Dizin bozuk görünüyordu, bu yüzden aşağıdaki komutlarla kaldırdım.

git rm -rf --cached .
git reset --hard HEAD

0

Bu hatayı Github Masaüstü İstemcisi (OSX) ile aldım. Tüm yaptığım uygulamadan çıkıp yeniden açıldı ve sonra çalışmaya başladı.

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.