Nhận một lỗi nghiêm trọng trong git cho nhiều mục giai đoạn


241

Sử dụng Git phiên bản 2.2.0 với công cụ trò chơi thống nhất trên OS X và muốn cam kết mã của tôi. Tôi đã thêm mọi thứ và không nhận được thông báo lỗi. sau đó cam kết -m và nhận được thông báo lỗi này:

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

Không nhận thấy tôi đã đẩy, nó không đưa ra thông báo lỗi, thực tế đã nói Everything up-to-date Vì vậy, tôi đã kiểm tra bitbucket (nơi giữ repo) và nó không hiển thị cam kết của tôi. vì vậy tôi đã kiểm tra nhật ký cục bộ của mình và điều đó cũng không thể hiện cam kết của tôi.

Tôi đã tìm kiếm trên google để tìm câu trả lời ... và không có gì. lỗi này là gì và làm thế nào tôi có thể sửa chữa nó?


Phiên bản nào của git, hoặc công cụ bạn đang sử dụng? Đã có một chủ đề gần đây trong danh sách các nhà phát triển về việc cải thiện việc kiểm tra cho nhiều mục giai đoạn. news.gmane.org/gmane.comp.version-control.git
Philip Oakley

Âm thanh có khả năng kiểm tra thêm trong 2.2.0 có thể được tham gia. "Đảm bảo các mục chưa được xóa được xóa" 12 tháng 8 bởi Jaime Soriano Pastor, có thể là một chủ đề để bắt đầu.
Philip Oakley

4
vậy tại sao điều này xảy ra?
Charlie Parker

chỉ cần thực hiện chỉnh sửa giả cho tệp đã nói và 'cam kết và đồng bộ hóa'.
sajanyamaha

Câu trả lời:


381

Cách giải quyết đầu tiên, mà dường như làm việc với các phiên bản gần đây của Git (2.3 trở lên, Q2 + 2015) được đề cập trong cấp 's up-to-date nhiều câu trả lời :

  1. Xóa chỉ mục

    $ rm .git/index
    
  2. Thêm tất cả

    $ git add -A
    
  3. Cam kết

    $ git commit -a
    

Câu trả lời gốc (cuối năm 2014)
Cách giải quyết thông thường là:

  • nhân bản một lần nữa repo từ xa vào một repo địa phương mới
  • thêm các thay đổi từ repo đầu tiên sang thứ hai:

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

Bạn có thể thấy thông báo lỗi này read-cache.c, được thảo luận trong bản vá này (" read-cache.c: Đảm bảo các mục nhập chưa được xóa được xóa ") và được giới thiệu trong cam kết Git 2.2 .
Vì điều này rất gần đây, có thể việc hạ cấp Git xuống 2.1 sẽ đủ để không bị ảnh hưởng bởi bản vá đó.

Các OP Daniel Toebe thêm trong các ý kiến :

Vấn đề xảy ra trên macbook của tôi, nó đã quyết định thất bại với tôi, và một tai nạn máy tính khác khiến tôi chùn bước trong các dự án của mình.


@sharpner có thể đó là một lỗi, hoặc tác dụng phụ của bản vá đó trong trường hợp của bạn.
VonC

1
Xin lỗi vì phản hồi chậm trễ ... Vấn đề đã xảy ra trên macbook của tôi, điều này đã quyết định thất bại với tôi, và một sự cố rủi ro máy tính khác khiến tôi chùn bước trong các dự án của mình.
Daniel Toebe

1
@DanielToebe phản hồi tốt. Tôi đã đưa nó vào câu trả lời để dễ nhìn hơn.
VonC

Tôi vừa chạy vào cùng, sau một nỗ lựcgit commit -c sha
Chris Leishman

2
Đối với bất kỳ ai quan tâm, điều này xảy ra với tôi vì tôi đã vô tình chỉnh sửa một tệp trong thư mục .git của tôi thay vì chính tệp đó.
Ostler.c

166

Tôi tin rằng tôi đã gặp phải vấn đề này vì tôi đã thêm và cam kết thay đổi và sau đó xóa một tệp mà tôi vừa cam kết. Nếu điều này nghe có vẻ giống với trường hợp của bạn, tôi khuyên bạn nên làm theo cách dưới đây để lưu lại nhân bản và thêm thủ công vào các thay đổi của bạn.

Tôi đã có thể khắc phục sự cố này bằng cách xóa tệp .git / index trong kho lưu trữ của mình, tương tự như những gì @slider đề xuất (tôi tin rằng anh ta đã nhập sai đường dẫn).

rm .git/index

Sau đó, tôi phải thêm và cam kết thay đổi cục bộ của mình một lần nữa

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

Sau đó tôi đã có thể đẩy từ xa.

Chỉ số git là gì và nó có liên quan như thế nào?

Thỏa thuận với chỉ số Git là gì?

Chỉ mục git nghiêm trọng là nơi bạn đặt các tệp bạn muốn cam kết vào kho git.

Trước khi bạn cam kết các tập tin (checkin) vào kho git, trước tiên bạn cần đặt các tệp trong chỉ mục gitiên.

Tôi tin rằng bằng cách xóa tệp này, git sẽ lập chỉ mục lại repo, tạo một tệp mới và bạn sẽ ổn. Nó giải quyết vấn đề này bởi vì kho lưu trữ cục bộ được lập chỉ mục lại mà không có tệp tôi đã xóa gây ra tất cả sự ồn ào.

Chỉnh sửa: Có vẻ như đây là liên quan đến Mac (dựa trên nhận xét) vì vậy nếu nó giúp tôi trên OSX 10.10 và git phiên bản 2.3.4 được cài đặt thông qua brew.


1
Yay, điều này đã làm việc và cảm ơn bạn đã giải thích. Một lưu ý ở đây là trước khi bạn thực hiện việc này là xóa hoặc di chuyển hoặc xóa bất kỳ tệp nào mà bạn chưa thêm danh sách thay đổi mặc định hiện tại. Họ sẽ bị hút trở lại vớigit add -A
Kirby

4
Xác nhận điều này trên Mac OS X Yosemite. Đã xảy ra trong khi làm việc trong Android Studio, mặc dù không có cụ thể kịch bản tái sản xuất ..
Drew

4
Đây phải là câu trả lời chính xác bởi vì nó hoạt động và nó có một lời giải thích tốt hơn. Điều này chỉ xảy ra với tôi là tốt.
Jared Burrows

1
Làm việc cho tôi cũng được. Thêm root kiểm soát phiên bản trong IntelliJ đã hỗ trợ nó nhưng rm'ing chỉ số git hoạt động tốt. Cảm ơn lời giải thích @grant.
Andrew Eells

1
Tôi cũng gặp vấn đề này khi IntelliJ đang chạy ẩn trong khi tôi đang thực hiện một số sửa đổi với vim. Tôi nghĩ rằng có một điều kiện cuộc đua trong git. (Trên thực tế, tôi nghĩ rằng có rất nhiều trong số họ.) Đóng IntelliJ, xóa chỉ mục và cam kết lại công việc của tôi hoạt động tốt.
Robert Fischer

119

Đối với dự án

rm .git/index
git reset

Sau khi xóa chỉ mục, bạn cần tạo lại nó bằng git reset

Đối với mô hình con:

Chuyển đến thư mục dự án chính

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

4
Thiết lập lại git sau khi loại bỏ chỉ mục hoàn toàn đóng đinh nó. Cảm ơn! Nếu bạn không thiết lập lại, mọi tập tin sẽ là mới đối với chỉ mục, do đó phải được thêm vào. Đặt lại sẽ xây dựng lại các chỉ số có vẻ như. Mặc dù tôi không hiểu làm thế nào git có thể xây dựng lại chỉ mục mà không có chỉ mục?
JosFabre

1
@JosFaber Vì chỉ mục không phải là lịch sử cam kết. Trên thực tế, đó là cấu trúc của trình trợ giúp "dự phòng". Xem schacon.github.io/gitbook/7_the_git_index.html Vì vậy, nó có thể được xây dựng lại hoàn toàn so sánh cây làm việc và ĐẦU. Và đó chính xác là những gì git reset làm. Trang con người nói: ... đặt lại các mục sao chép từ <cây-ish> về chỉ mục ...
farincz

2
Cảm ơn bạn! Không có thiết lập lại git, nó muốn tôi thêm lại tất cả các tệp đã có trong kho lưu trữ.
Robert Bernstein

1
Tôi sử dụng sourcetree trên máy mac của tôi. Tôi đã xóa thủ công .git / index, sau đó chọn cam kết tốt cuối cùng, nhấp chuột phải, chọn thiết lập lại chủ (trong trường hợp của tôi) cho nhận xét này - sau đó chọn tùy chọn hỗn hợp khiến công việc của tôi ở trạng thái tốt. Sau đó tôi đã có thể thực hiện một cam kết về công việc hiện tại của tôi và mọi thứ đều khỏe mạnh.
dùng216661

1
Cách sạch nhất và nhanh nhất!
h4rd4r7c0r3

29

Bạn có thể xóa tệp chỉ mục Git khỏi dự án của bạn. Trong thư mục gốc của dự án, hãy chạy lệnh sau:

rm .git/index

Sau đó git nó hoạt động.


3
Điều này không trả lời câu hỏi. Xin hãy xác nhận câu trả lời này với nhiều chi tiết hơn.
ArtOfCode 6/03/2015

Không làm việc cho tôi rm: /.git/index: No such file or directoryMac OSX Yosemite; git 2.3.4 được cài đặt thông qua homebrew
cấp

@grant Bạn phải xóa dấu gạch chéo lúc đầu. ( rm .git/indextrong thư mục git của bạn).
ChristophLSA

2
@ChristophLSA cảm ơn bạn - Tôi đã trả lời với một mô tả về những gì hành động này làm để cung cấp rõ ràng. Câu trả lời này có thể được cập nhật để phản ánh đúng đường dẫn và thông báo cho người dùng hành động đó không?
cấp

1
Tôi biết tại sao điều này hoạt động. Vấn đề được gây ra bởi một chỉ số bị hỏng. Tôi gặp vấn đề này khi tôi làm hỏng chỉ mục bằng cách sửa đổi mã trong IntelliJ trong khi viết một thông điệp cam kết trong dòng lệnh. Xóa chỉ mục không phá hủy các thay đổi của bạn, nó chỉ đơn giản là bỏ qua chúng.
Nhiệt kế

3

Tôi thử một giải pháp khác và nó hiệu quả với tôi. Dưới đây là những lựa chọn của tôi

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

như @farincz đã nói, bạn cần tạo lại chỉ mục một lần nữa bằng cách gọi git resetnếu không nó sẽ cung cấp cho bạn fatal: Could not reset index file to revision 'HEAD' .
kuskmen 30/03/2016

1

Nếu điều này xảy ra trong một mô hình con

Tệp chỉ mục được đặt bên trong .gitthư mục mẹ :

.git/modules/your_project_structure/index

Trong một mô hình con, không có thư mục nào được đặt tên .git(ít nhất là trong dự án tôi đang làm việc), chỉ có một .gittệp cho bạn biết (và git) nơi tìm thư mục git của dự án đó.

Trạng thái Git hiển thị những thay đổi mà tôi đã không thực hiện

Sau khi xóa các tệp chỉ mục và thực hiện một git reset, tôi thấy mình phải đối mặt với nhiều thay đổi không thể giải thích được và thiết lập lại cứng không giúp được gì.

Cảnh báo bạn sẽ mất tất cả các thay đổi của mình, vì vậy hãy cam kết và đẩy chúng trước khi tiếp tục.

Chỉ mục dường như bị hỏng, vì vậy tôi loại bỏ nó bằng các lệnh sau.

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

0

Tôi vừa gặp lỗi này với Github Desktop Client (OSX). Tất cả những gì tôi làm là thoát khỏi ứng dụng và mở lại và sau đó nó bắt đầu hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.