Mendapatkan kesalahan fatal dalam git untuk beberapa entri tahap

241

Menggunakan Git versi 2.2.0 dengan mesin game kesatuan pada OS X, dan ingin mengkomit kode saya. Saya menambahkan semuanya dan tidak mendapatkan pesan kesalahan. lalu komit -m, dan dapatkan pesan kesalahan ini:

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

Tidak memperhatikannya saya mendorong, itu tidak memberikan pesan kesalahan, pada kenyataannya mengatakan Everything up-to-date Jadi saya memeriksa bitbucket (di mana repo diadakan) dan itu tidak menunjukkan komit saya. jadi saya memeriksa log lokal saya dan itu juga tidak menunjukkan komit saya.

Saya sudah mencari jawaban untuk google ... dan tidak ada. apa kesalahan ini? dan bagaimana cara memperbaikinya?

Daniel Toebe
sumber
Apa versi git, atau alat yang Anda gunakan? Ada utas baru-baru ini di daftar pengembang tentang meningkatkan pemeriksaan untuk beberapa entri tahap. news.gmane.org/gmane.comp.version-control.git
Philip Oakley
Kedengarannya mungkin bahwa pemeriksaan tambahan dalam 2.2.0 mungkin terlibat. "Pastikan entri yang tidak dihapus dihapus" 12 Agu oleh Jaime Soriano Pastor, mungkin merupakan salah satu utas untuk memulai.
Philip Oakley
4
jadi mengapa ini terjadi?
Charlie Parker
cukup edit tiruan ke file tersebut dan 'komit dan sinkronkan'.
sajanyamaha
Catatan: lihat juga stackoverflow.com/a/51919644/6309
VonC

Jawaban:

381

Solusi pertama, yang tampaknya bekerja dengan versi terbaru dari Git (2.3 +, Q2 + 2015) disebutkan dalam hibah 's lebih up-to-date jawaban :

  1. Hapus indeks

    $ rm .git/index
    
  2. Tambahkan semua

    $ git add -A
    
  3. Melakukan

    $ git commit -a
    

Jawaban asli (akhir 2014)
Solusi yang biasa adalah untuk:

  • clone lagi repo jarak jauh menjadi repo lokal baru
  • tambahkan perubahan dari repo pertama ke yang kedua:

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

Anda dapat melihat pesan kesalahan ini read-cache.c, dibahas di tambalan ini (" read-cache.c: Pastikan entri yang tidak dihapus dihapus "), dan diperkenalkan di komit Git 2.2 .
Karena ini sangat baru, ada kemungkinan bahwa menurunkan Git ke 2.1 akan cukup untuk tidak terpengaruh oleh tambalan itu.

The OP Daniel Toebe menambahkan di komentar :

Masalah ini terjadi pada macbook saya, yang memutuskan untuk gagal pada saya, dan kecelakaan komputer lain membuat saya ketinggalan dalam proyek saya.

VONC
sumber
@sharpner mungkin saja itu adalah bug, atau efek samping dari tambalan itu dalam kasus Anda.
VonC
1
Maaf atas tanggapan yang tertunda ... Masalah terjadi pada macbook saya, yang memutuskan untuk gagal pada saya, dan kecelakaan komputer lain membuat saya ketinggalan dalam proyek-proyek saya.
Daniel Toebe
1
@DanielToebe umpan balik yang bagus. Saya telah memasukkannya dalam jawaban untuk lebih banyak visibilitas.
VonC
Saya hanya mengalami hal yang sama, setelah upaya untukgit commit -c sha
Chris Leishman
2
Bagi yang berminat, ini terjadi pada saya karena saya tidak sengaja mengedit file di folder .git saya, bukan file itu sendiri.
ostler.c
166

Saya yakin saya mengalami masalah ini karena saya menambahkan dan melakukan perubahan dan kemudian menghapus file yang baru saja saya lakukan. Jika ini mirip dengan kasus Anda, saya sarankan mengikuti di bawah ini untuk menyimpan kloning ulang dan menambahkan perubahan Anda secara manual.

Saya bisa memperbaiki masalah ini dengan menghapus file .git / index di repositori saya, mirip dengan apa yang disarankan @slider (saya yakin dia salah ketik path).

rm .git/index

Kemudian saya harus menambahkan dan melakukan perubahan lokal saya lagi

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

Saya kemudian bisa mendorong dari jarak jauh.

Apa indeks git dan bagaimana itu relevan?

Apa Kesepakatannya Dengan Indeks Git?

"Indeks" git adalah tempat Anda meletakkan file yang ingin Anda komit ke repositori git.

Sebelum Anda "mengkomit" (checkin) file ke repositori git, Anda harus terlebih dahulu menempatkan file dalam "indeks" git.

Saya percaya bahwa dengan menghapus file ini, git akan mengindeks ulang repo, membuat yang baru dan Anda siap melakukannya. Ini memecahkan masalah ini karena repositori lokal diindeks ulang tanpa file yang saya hapus yang menyebabkan semua keributan.

Sunting: Sepertinya ini terkait Mac (berdasarkan komentar) jadi jika membantu saya menggunakan OSX 10.10 dan git versi 2.3.4 diinstal melalui brew.

hibah
sumber
1
Yay, ini berhasil dan terima kasih atas penjelasannya. Satu peringatan di sini adalah sebelum Anda melakukan ini adalah untuk menyembunyikan atau memindahkan atau menghapus file apa pun yang Anda belum menambahkan daftar perubahan default saat ini. Mereka akan tersedot kembali dengangit add -A
Kirby
4
Konfirmasikan ini di Mac OS X Yosemite. Terjadi saat bekerja di Android Studio, meskipun tidak ada skenario spesifik yang dapat direproduksi ..
Drew
4
Ini harus menjadi jawaban yang benar karena berfungsi dan memiliki penjelasan yang lebih baik. Ini baru saja terjadi pada saya juga.
Jared Burrows
1
Bekerja untuk saya juga. Menambahkan root kontrol versi di IntelliJ borked itu tetapi rm'ing indeks git bekerja dengan baik. Terima kasih atas penjelasannya.
Andrew Eells
1
Saya juga memiliki masalah ini ketika IntelliJ berjalan di latar belakang sementara saya membuat beberapa modifikasi dengan vim. Saya pikir ada kondisi balapan di git. (Sebenarnya, saya pikir ada banyak dari mereka.) Menutup IntelliJ, menghapus indeks, dan melakukan kembali pekerjaan saya berhasil dengan baik.
Robert Fischer
119

Untuk proyek

rm .git/index
git reset

setelah menghapus indeks, Anda harus membuatnya kembali dengan git reset

Untuk submodule:

Buka folder proyek utama

rm .git/modules/your_project_structure/index
git reset --hard HEAD
farincz
sumber
4
Reset git setelah penghapusan indeks benar-benar berhasil. Terima kasih! Jika Anda tidak mengatur ulang setiap file akan menjadi baru untuk indeks, jadi harus ditambahkan. Pengaturan ulang akan membangun kembali indeks itu. Meskipun saya tidak mengerti bagaimana git dapat membangun kembali indeks, tanpa indeks?
JosFabre
1
@JosFaber Karena indeks tidak memiliki riwayat. Sebenarnya itu adalah struktur pembantu "redundan". Lihat schacon.github.io/gitbook/7_the_git_index.html Sehingga dapat sepenuhnya dibangun kembali dengan membandingkan pohon yang bekerja dan HEAD. Dan itulah tepatnya yang dilakukan git reset. Halaman manual mengatakan: ... setel ulang entri salinan dari <tree-ish> ke indeks ...
farincz
2
Terima kasih! Tanpa reset git, ia ingin saya menambahkan kembali semua file yang sudah ada di repositori.
Robert Bernstein
1
Saya menggunakan sourcetree di mac saya. Saya secara manual menghapus .git / indeks, kemudian memilih komit baik terakhir, diklik kanan, master reset terpilih (dalam kasus saya) untuk komentar ini - kemudian memilih opsi campuran yang membuat pekerjaan saya dalam keadaan baik. Saya kemudian dapat melakukan komitmen terhadap pekerjaan saya saat ini dan semuanya sehat sekarang.
user216661
1
Cara terbersih dan tercepat!
h4rd4r7c0r3
29

Anda dapat menghapus file indeks Git dari proyek Anda. Di root proyek Anda, jalankan perintah berikut:

rm .git/index

Setelah itu git berhasil.

slider
sumber
3
Ini tidak menjawab pertanyaan. Harap tambahkan jawaban ini dengan lebih detail.
ArtOfCode
Tidak bekerja untuk saya rm: /.git/index: No such file or directoryMac OSX Yosemite; git 2.3.4 diinstal melalui homebrew
hibah
@grant Anda harus menghapus garis miring di awal. ( rm .git/indexdi direktori git Anda).
ChristophLSA
2
@ChristophLSA terima kasih - saya menjawab dengan deskripsi tentang apa tindakan ini untuk memberikan kejelasan. Bisakah jawaban ini dimutakhirkan untuk mencerminkan jalur yang tepat dan dan memberi tahu pengguna apa tindakannya?
berikan
1
Saya tahu mengapa ini berhasil. Masalahnya disebabkan oleh indeks yang rusak. Saya mengalami masalah ini ketika saya merusak indeks dengan memodifikasi kode di IntelliJ saat menulis pesan komit di baris perintah. Menghapus indeks tidak merusak perubahan Anda, itu hanya menghapus tahapannya.
Pirolistik
3

Saya mencoba solusi yang berbeda dan berfungsi untuk saya. Di bawah ini adalah opsi saya

#cd .git
#rm index
#cd ..
#git add .
wqycsu
sumber
seperti @farincz katakan, Anda perlu membuat ulang indeks lagi dengan menelepon git resetjika tidak memberikan Anda fatal: Could not reset index file to revision 'HEAD' .
kuskmen
1

Jika ini terjadi dalam submodule

File indeks terletak di dalam .gitdirektori induk :

.git/modules/your_project_structure/index

Dalam submodule, tidak ada direktori bernama .git(setidaknya dalam proyek yang saya kerjakan), hanya ada satu.git file yang memberitahu Anda (dan git) di mana mencari direktori git dari proyek itu.

Status Git menunjukkan perubahan yang tidak saya lakukan

Setelah menghapus file indeks, dan melakukan git reset, saya menemukan diri saya menghadapi banyak perubahan yang tidak dapat dijelaskan dan hard reset tidak membantu.

Peringatan Anda akan kehilangan semua perubahan Anda, jadi komit dan dorong sebelum melanjutkan.

Indeks sepertinya rusak, jadi saya menghapusnya dengan perintah berikut.

git rm -rf --cached .
git reset --hard HEAD
Emile Bergeron
sumber
0

Saya baru saja mendapat kesalahan ini dengan Github Desktop Client (OSX). Yang saya lakukan adalah keluar dari aplikasi dan dibuka kembali dan kemudian mulai bekerja.

Oren
sumber