Điều đó có nghĩa là gì khi git nói một tập tin mà nhu cầu cập nhật của Google?


156

Cả đời tôi không thể tìm thấy bất kỳ lời giải thích hợp lý nào về thông báo "[file]: cần cập nhật" mà đôi khi git thỉnh thoảng lại xuất hiện. Ngay cả Câu hỏi thường gặp về git chính thức cũng giải thích điều này được đánh dấu là TODO. Nếu ai đó có thể giải thích A) nó có nghĩa là gì; và B) làm thế nào để sửa nó, tôi sẽ vô cùng biết ơn.


1
Câu hỏi hay, như bạn đã nói, ngay cả GitFaq cũng không có câu trả lời: git.wiki.kernel.org/index.php/ trộm
Justin Ethier


1
Bạn có thể cho biết chính xác lệnh nào tạo ra điều này? Và phiên bản nào của Git? Tôi đã cố xóa chúng khỏi UI, vì vậy Git gần đây không nên cho bạn biết điều này ngoại trừ ở những nơi tôi đã quên ;-).
Matthieu Moy

Câu trả lời:


108

Điều đó có nghĩa là bạn đang cố gắng hợp nhất các thay đổi từ một nơi nào đó, nhưng các thay đổi bao gồm sửa đổi tệp bị bẩn (hiện đang được sửa đổi trong cây làm việc của bạn). Bạn cần phải thực hiện các thay đổi nổi bật của mình hoặc bỏ qua chúng, kéo / rebase / merge / bất cứ điều gì bạn đang làm để cập nhật và hủy bỏ


4
Đó không thực sự là sức hút - đó là sự hợp nhất đó là một phần của sức hút. Bạn sẽ thấy lỗi tương tự nếu bạn cố gắng hợp nhất một nhánh cục bộ với cùng một vấn đề và tôi nghĩ các hoạt động hợp nhất khác (áp dụng, áp dụng stash ...) in các lỗi tương tự nếu không phải cùng một lỗi.
Cascabel

À, cảm ơn. Điều đó thực sự có ý nghĩa. Tôi đoán tôi cần đảm bảo rằng tôi cam kết thay đổi trước khi thanh toán ra một chi nhánh khác.
rofrankel

7
Trong trường hợp nó giúp kết quả tìm kiếm, tôi cũng gặp phải vấn đề này khi cố gắng thực hiện git svn rebasevới một bản sao làm việc bẩn. Stash lưu, rebase, stash pop, và tất cả đều đúng với thế giới.
Adam T Ink

1
Bản thân tệp có thể không được thay đổi - thậm chí thay đổi thuộc tính tệp (như quyền) có thể gây ra điều này.
chiborg

22

Như những người khác đã chỉ ra, thông báo cập nhật cần có nghĩa là tập tin bị bẩn hoặc nói cách khác là lỗi thời. Nhưng thay vì thực hiện thiết lập lại và bắt đầu lại từ đầu, những gì có thể được thực hiện chỉ đơn giản git statusvà sau đó git add <file> nếu nó nằm trong danh sách thay đổi . Bởi vì bạn đã có thể thêm tệp trước đó, nhưng sau đó đã thay đổi nó. Điều này đã xảy ra với tôi, và với đơn giản này, addtôi đã giải quyết được vấn đề.


7

Đăng nhập vào máy chủ sản xuất / đích của bạn, cdvào thư mục chứa ứng dụng của bạn và thực hiện hai lệnh đó.

1. Đặt lại về phiên bản mới nhất

CẢNH BÁO, điều này sẽ xóa tất cả các thay đổi của bạn:

git reset --hard HEAD

2. Kéo các thay đổi

git pull origin master


1
[git reset - ĐẦU TIÊN] làm việc cho tôi. Tôi đã cam kết từ một ổ đĩa chia sẻ Windows, nhưng thư mục Ubuntu của tôi sẽ không phản ánh cam kết tôi vừa thực hiện, mặc dù đó là cùng một thư mục (Z: ánh xạ tới / var / www / html /). Sau khi chạy này, [trạng thái git] và [git pull] cả hai đều hiển thị cập nhật.
Keith DC

Đây là giải pháp làm việc cho tôi quá. Tôi đã cố gắng sử dụng git Subree bằng SourceTree trên Windows và nó đã bị hỏng rất nhiều trong quá trình này.
Artem Russakovskii

3

Giống như câu trả lời cho câu hỏi khác được liên kết nói, thông điệp chỉ đơn giản có nghĩa là bạn có những thay đổi nổi bật. Bạn cũng có được điều này, ví dụ nếu bạn thực hiện một số thay đổi git add, sau đó thay đổi ý định và thực hiện git reset HEAD filevới ý định bắt đầu lại.


2
git reset HEAD filekhiến thông báo tương tự xuất hiện
chuyên gia

2

Lỗi này có thể xảy ra khi quá trình rebase thực hiện các thay đổi bổ sung cho các tệp không nằm trên nhánh đích.

Đối với tôi phần khó khăn là với .gitattributestập tin trong repo của tôi. Loại tệp nhị phân mới đã được thêm vào trong một nhánh khác nhưng việc xử lý bị buộc là tệp văn bản. Khi tệp được tải xuống từ repo bởi git, EOL (thực tế là byte giá trị nhị phân) đã được thay thế - dẫn đến chênh lệch nhị phân.

Thêm mục nhập mới để xử lý loại tệp mới dưới dạng nhị phân và thử lại toàn bộ quá trình đã giải quyết vấn đề cho tôi.


1

Trong trường hợp của tôi, tôi tiếp tục nhận được

assets/ElipseThree.png: needs update
You must edit all merge conflicts and then
mark them as resolved using git add

Tôi đã có những tập tin đó trong thư mục của mình, nhưng chúng đã được đổi tên trong chi nhánh hiện tại của tôi. Vì vậy, để sửa chữa, tôi đã chạy

$ git mv assets/ElipseThree.png assets/elipseThree.png
$ git add assets/elipseHalfFull.png 
$ git rebase --continue

và nó cho phép tôi tiếp tục

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.