fatal: git-write-tree: error building trees

202

Saya melakukan git pulldari repositori shared git, tetapi ada yang tidak beres, setelah saya coba git revert. Inilah situasinya sekarang:

$ 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

Apakah ada cara untuk mengatur ulang semua itu?

Terima kasih

malat
sumber

Jawaban:

566

Menggunakan:

git reset --mixed

bukannya git reset --hard. Anda tidak akan kehilangan perubahan apa pun.

heracek
sumber
29
Perhatikan bahwa --mixedargumen tersebut juga merupakan git resetperilaku default, ketika tidak diberikan argumen. manual untuk referensi.
Christopher
62
Jawaban yang valid, tetapi akan menyenangkan untuk memiliki penjelasan tentang apa yang terjadi dan mengapa ini perlu.
mmigdol
1
@mmigdol Ya - Saya ingin melihat penjelasan mengapa git resetdengan opsi (default) --mixedsesuai dan efektif di sini juga. Menurut gabungan - Git masalah jalur unmerged : Ini akan beralih ke HEAD, dan memberitahu git untuk melupakan konflik gabungan, dan biarkan direktori kerja apa adanya. heracek, apa itu yang terjadi?
nealmcb
1
@writofmandamus Bulan terlambat, tetapi perhatikan jarak antara reset dan tanda hubung.
Mike Ortiz
2
FWIW saya mengalami masalah ini ketika saya melakukannya git stash. Melakukan git reset --mixedmengatasinya.
Sayang
45

Ini bekerja untuk saya:

Melakukan

$ git status

Dan periksa apakah sudah 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

Perbaiki dengan git addmasing-masing dan coba git stashlagi.

git add app/assets/images/logo.png
David Rz Ayala
sumber
6
Ini berhasil untuk saya. git reset - dicampur mungkin lebih baik daripada perdamaian dunia, tetapi tanpa penjelasan tentang apa yang dilakukannya, saya tidak menyentuhnya. Dalam kasus saya, ada tabrakan pada tarikan sebelumnya yang tidak saya perhatikan. Penyimpanan gagal karena tarikan yang tidak terselesaikan.
Ian Ollmann
Saya tidak memahami strategi ini lebih baik daripada git reset --mixed, tetapi berhasil, dan sepertinya lebih cocok untuk kasus saya karena saya mendapat kesalahan setelah git stashdaripada git revert.
Mars
Sebuah unmerged sarana jalan Anda telah menjalankan git merge, atau setara gabungan git, dan mencoba untuk menggabungkan dua set yang berbeda dari perubahan ke file itu, tapi gagal.
siddhantsomani
11

Untuk menindaklanjuti respons malat, Anda dapat menghindari kehilangan perubahan dengan membuat tambalan dan menerapkannya kembali di lain waktu.

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

Simpan tambalan Anda di luar folder repositori untuk keamanan.

afilina
sumber
Ini memberi saya: SDGL132d9f4b4: glst-common dstromberg $ patch -p0 </tmp/patch.txt patch: **** Hanya sampah yang ditemukan dalam input patch.
dstromberg
Saya pikir Anda harus mvpatch kembali ke direktori tempat Anda membuatnya. 1. git diff2. mv patch.txt /tmp3. git stash4. mv /tmp/patch.txt .5.patch -p0
yunzen
9

Saya menggunakan:

 git reset --hard

Saya kehilangan beberapa perubahan, tetapi ini tidak masalah.

malat
sumber
6
Hanya sebuah catatan: git revertupaya untuk menggabungkan perubahan dari masa lalu; Anda telah menggunakan dengan benar git resetuntuk hanya memutar mundur jam. Sangat disayangkan bahwa git stashtidak bekerja dengan menggabungkan konflik.
Josh Lee
2
Jika Anda kehilangan perubahan, ini bukan perbaikan;)
Pedro Magalhães
5

mungkin ada beberapa path yang tidak di-emergasi di repositori git yang harus Anda selesaikan sebelum menyimpannya.

npeters
sumber
1
Ini membantu saya jadi saya akan memberi +1. Tapi saya memberikan jawaban yang lebih panjang.
David Rz Ayala
-1

Ini terjadi pada saya ketika saya mencoba untuk menyembunyikan perubahan saya, tetapi kemudian perubahan saya memiliki konflik dengan keadaan cabang saya saat ini.

Jadi saya lakukan git reset --mixeddan kemudian menyelesaikan konflik git dan menyembunyikannya lagi.

Madu
sumber