ölümcül: git-write-tree: Hata oluşturma ağaçları


202

git pullPaylaşılan git deposundan bir yaptım , ama denedikten sonra bir şeyler gerçekten yanlış gitti git revert. Şimdi durum şu:

$ git stash
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge
Utilities/socketxx/socket++/sockstream.cpp: needs merge
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge
Utilities/socketxx/socket++/sockstream.cpp: needs merge
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2aafac967c35fa4e77c3086b83a3c102939ad168)
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (78cc95e8bae85bf8345a7793676e878e83df167b)
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2524db713fbde0d7ebd86bfe2afc4b4d7d48db33)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4bb4ba78973091eaa854b03c6ce24e8f4af9e7cc)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (ad0982b8b8b4c4fef23e69bbb639ca6d0cd98dd8)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4868371b7218c6e007fb6c582ad4ab226167a80a)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (f7a1b386b5b13b8fa8b6a31ce1258d2d5e5b13c5)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (6ce299c416fbb3bb60e11ef1e54962ffd3449a4c)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (75c8043a60a56a1130a34cdbd91d130bc9343c1c)
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: unmerged (79c2843f2649ea9c87fa57662dafd899a5fa39ee)
...
fatal: git-write-tree: error building trees
Cannot save the current index state

Tüm bunları sıfırlamanın bir yolu var mı?

Teşekkürler

Yanıtlar:


566

kullanın:

git reset --mixed

yerine git reset --hard. Hiçbir değişikliği kaybetmeyeceksiniz.


29
Bağımsız --mixeddeğişken verilmediğinde, bağımsız değişkenin de git resetvarsayılan davranışı olduğunu unutmayın. referans için manpage .
Christopher

62
Geçerli cevap, ama ne olduğu ve bunun neden gerekli olduğu hakkında bir açıklama yapmak güzel olurdu.
mmigdol

1
@mmigdol Evet - git reset(varsayılan) --mixedseçeneğinin neden burada uygun ve etkili olduğuna ilişkin bir açıklama görmek istiyorum . Göre birleştirme - Git birleştirilmemiş yol sorunu : Bu BAŞ geçmek ve herhangi bir birleştirme çatışmaları unutmak için git söyle, olduğu gibi çalışma dizinini bırakacaktır. heracek, olan bu mu?
nealmcb

1
@writofmandamus Aylar geç, ancak sıfırlama ve kısa çizgiler arasındaki boşluğa dikkat edin.
Mike Ortiz

2
FWIW Yaparken bu sorunla karşılaştım git stash. Bunu yapmak git reset --mixedçözdü.
Bal

45

Bu benim için çalıştı:

Yapmak

$ git status

Ve kontrol edin Unmerged paths

# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add <file>..." to mark resolution)
#
#   both modified:      app/assets/images/logo.png
#   both modified:      app/models/laundry.rb

Bunları git addher birine sabitleyin ve git stashtekrar deneyin .

git add app/assets/images/logo.png

6
Bu benim için çalıştı. git reset --mixed dünya barışından daha iyi olabilir, ama ne yaptığına dair bir açıklama yapmadan, ona dokunmuyorum. Benim durumumda, daha önceki bir çekmede fark etmediğim bir çarpışma oldu. Çözülemeyen çekme nedeniyle saklanma başarısız oldu.
Ian Ollmann

Ben daha iyi daha bu stratejiyi anlamıyorum git reset --mixed, ama işe yaradı ve ben sonra hata var çünkü benim durumumda için daha iyi bir uyum gibi görünüyordu git stashziyade git revert.
Mars

Bir birleştirilmemiş yolu araçlarının Yayınladığınız git mergeveya git birleştirme eşdeğer ve bu dosyanın değişikliklerin iki farklı ayarlar birleştirmek için çalıştı, ama başaramadı.
siddhantsomani

11

Malat'ın yanıtını takip etmek için, bir yama oluşturarak değişiklikleri kaybetmekten kaçınabilir ve daha sonra tekrar uygulayabilirsiniz.

git diff --no-prefix > patch.txt
patch -p0 < patch.txt

Düzeltme ekini güvenlik için depo klasörünün dışında saklayın.


Bu bana verdi: SDGL132d9f4b4: glitch-common dstromberg $ patch -p0 </tmp/patch.txt yama: **** Yama girişinde sadece çöp bulundu.
dstromberg

mvDüzeltme ekini yeniden oluşturduğunuz dizine yeniden eklemeniz gerektiğini düşünüyorum . 1. git diff2. mv patch.txt /tmp3. git stash4. mv /tmp/patch.txt .5.patch -p0
yunzen

9

Kullandım:

 git reset --hard

Bazı değişiklikleri kaybettim, ama sorun değil.


6
Sadece bir not: git revertgeçmişten gelen değişiklikleri birleştirmeye çalışır; git resetsaati geri sarmak için doğru şekilde kullandınız . git stashBirleşme çatışmalarıyla çalışmayan talihsiz bir durumdur .
Josh Lee

2
Değişiklikleri kaybederseniz, bu bir düzeltme değildir;)
Pedro Magalhães

5

belki git deponuzda saklanmadan önce çözmeniz gereken bazı birleştirilmemiş yollar vardır.


1
Bu bana yardımcı oldu, bu yüzden ona +1 vereceğim. Ama daha geniş bir cevap verdim.
David Rz Ayala

-1

Bu, değişikliklerimi saklamaya çalıştığımda benim için oldu, ancak değişikliklerimin şubemin mevcut durumu ile çatışmaları vardı .

Bu yüzden git reset --mixedgit çatışmasını çözdüm ve tekrar sakladım.

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.