2011-05-13 33 views
21

tiêu đề gốc: git - cập nhật tất cả các file chưa được thay đổigit - lỗi sau khi hợp nhất các cuộc xung đột trong stash pop

Hiện nay tôi đang cố gắng để cập nhật tất cả các file trong một kho git chưa được thay đổi. Cho phép nói ví dụ tôi có:

  • test1.py
  • test2.py

test1.py đã được sửa đổi tại địa phương, trong khi cả hai tập tin đã được sửa đổi từ xa. Bây giờ tôi đã thử:

git stash 
git pull 
git stash pop 

khôi phục các thay đổi của tôi, cảnh báo rằng tôi cần hợp nhất test1.py. Càng xa càng tốt. Vấn đề phát sinh khi tôi cố gắng làm lại quá trình tương tự (sau khi cả hai tập tin đã được thay đổi một lần nữa). Git hiện có nội dung là

unmerged (6b126638f7c63aa648609afa60ab972a2403502b) 
fatal: git-write-tree: error building trees 
Cannot save the current index state 

khiến tôi rất buồn. Nó chỉ muốn một điều đơn giản: Cập nhật tất cả các tập tin mà tôi đã không thay đổi. Tôi sẽ chăm sóc sáp nhập sau.

+0

Một lưu ý khác: với Git, bạn không thực sự phá vỡ cam kết.Khi bạn kéo, bạn sẽ nhận được * tất cả * các thay đổi, cho dù bạn đã thay đổi những tệp đó hay chưa. Sau khi bạn áp dụng (bật) các thay đổi đã lưu trữ của mình, bạn kết thúc với sự kết hợp của các thay đổi (thông qua hợp nhất, đằng sau hậu trường). Mục tiêu của bạn chỉ cập nhật các tệp bạn chưa thay đổi không thực sự có ý nghĩa nhiều. – Cascabel

Trả lời

27

Bạn đã giải quyết xung đột trong tệp của mình (có thể? Xem chú thích), nhưng Git không biết bạn có đang thực hiện hay không. Bạn phải chỉ ra git rằng bạn đã hoàn thành việc giải quyết xung đột đó. (Nếu không, nếu nó cho phép bạn di chuyển và bạn đã không thực sự giải quyết nó, bạn có thể tìm thấy tất cả các loại cách để bắn mình vào chân.)

Theo tôi biết, cách để làm điều đó là:

git add <file>  # stage the resolved version, which marks it as resolved 
git reset HEAD <file> # unstage the changes, leaving the resolution just in the work tree 

Dường như phải có cách để thực hiện cả hai cùng một lúc với update-index nhưng không rõ ràng với tôi từ giao diện nhanh. (Nhưng sau đó một lần nữa, đối với xung đột hợp nhất thực tế, bạn không bao giờ muốn đánh dấu xung đột là đã giải quyết mà không dàn dựng nội dung; nó chỉ dành cho các dấu gạch ngang phát sinh.)

Và như VonC nói điều này xảy ra một lần nữa, bạn có thể dễ dàng nhìn thấy những gì đã kết hợp xung đột khi áp dụng các stash sử dụng git status. Họ sẽ được liệt kê bằng màu đỏ (nếu bạn có màu trên) và nói unmerged (hoặc có thể deleted by us/them nếu đó là một xung đột xóa/sửa đổi).

Lưu ý: Nhìn lại câu hỏi của bạn, tôi thực sự không thể biết liệu bạn có khắc phục được xung đột hay không - bạn vừa nói "rất tốt". "Cảnh báo" mà bạn thấy thực sự có ý nghĩa như một đề xuất để giải quyết xung đột ngay lập tức. Xung đột nảy sinh khi cố gắng kết hợp các thay đổi mà bạn đã kéo theo những thay đổi mà bạn đã loại bỏ. Bạn phải giải quyết xung đột đó và đưa cây công việc của bạn vào trạng thái nhất quán trước khi bạn có thể tiếp tục theo bất kỳ cách nào. Đối phó với nó giống như bạn sẽ là một cuộc xung đột hợp nhất - nhìn vào tập tin, tìm các điểm đánh dấu xung đột, tìm ra nội dung cần lưu giữ! (Và sau đó nhìn lại phía trên để biết cách kết thúc.)

+0

Bạn không thấy câu trả lời ngay lập tức. 1 cho các thủ tục rõ ràng để làm theo. – VonC

+0

Tôi đã cố gắng theo dõi điều này. Sau các lệnh được gợi ý của bạn, tôi đã thử 'pop stit pop' một lần nữa nhưng nó vẫn không hoạt động. Bây giờ nó nói "lỗi: Các thay đổi cục bộ của bạn đối với các tệp sau sẽ bị ghi đè bằng cách hợp nhất: " –

+0

Tôi có cùng sự cố với @Dave Cohen. Tôi đã có thể giải quyết nó bằng cách sử dụng 'git checkout -f ', trong đó (cảnh báo!) Tung ra bất kỳ thay đổi cục bộ nào. – James

2

Điều đó có nghĩa là stash thứ hai của bạn không hoạt động do hợp nhất vẫn chưa được giải quyết.
Xem điều này SO question minh họa thông báo lỗi tương tự trên stash.

Điều này thread confirms rằng một cây không thể chứa các tệp chưa được nhúng.

You have a tree with unmerged entries.
Why don't you look into the issue and solve it?
A simple " git status " should show you what are the unmerged entries. A simple look at those files should show you conflict markers.

Resolve the issue, commit, continue.

Các vấn đề liên quan