2009-08-08 23 views
50

Tôi đang cố gắng cập nhật repo của mình từ một nhánh từ xa và tiếp tục gặp lỗi này khi tôi thực hiện "git pull". Tôi đã không thực hiện bất kỳ thay đổi địa phương nào, và ngay cả khi tôi có tôi không cần phải giữ chúng.Git pull: lỗi: Nhập foo không tăng tốc. Không thể hợp nhất

Tôi đã thử:

git reset --hard

và tôi nhận được cùng một vấn đề

Điều duy nhất mà dường như để làm việc là xóa các tập tin vi phạm và cố gắng một lần nữa git pull .

Tôi cũng đã thử "git stash" theo sau là "git pull". Không đi.

chỉnh sửa: sử dụng PortableGit-1.6.4-preview20090729 vì vậy mọi lỗi trước đó có lỗi giả phải được sửa.

+0

Xem giải thích trong http://git.or.cz/gitwiki/GitFaq có giúp ích hay không. –

+0

Ditto "* Điều duy nhất có vẻ hoạt động là xóa tệp vi phạm và thử lại lệnh git. *". Đối với tôi, ít nhất một tệp không có trong git; nó được .gitignored bởi một quy tắc ký tự đại diện. Tuy nhiên, không chắc chắn tại sao họ lại là những kẻ chặn. – ruffin

Trả lời

15

Nói chung, điều này có nghĩa là bạn có thay đổi trong tệp cục bộ chưa được cam kết với kho lưu trữ cục bộ của mình. Bạn cũng có thể xem chi tiết này stackoverflow question để biết thêm chi tiết.

+1

Từ câu hỏi: _ "Tôi chưa thực hiện bất kỳ thay đổi cục bộ nào ..." _ –

1

Worth thử:

bạn có thể thiết lập, chỉ dành riêng cho bản cập nhật này, thiết lập config parameter core.trustctime false?

core.trustctime 

If false, the ctime differences between the index and the working copy are ignored; useful when the inode change time is regularly modified by something outside Git (file system crawlers and some backup systems).

+0

tìm kiếm tốt, điều này thực sự hiệu quả đối với tôi khi tôi thấy thông báo lỗi ở trên khi chạy "git reset --merge". Khi tôi đặt paramater này thành false, nó đã loại bỏ lỗi. – DemitryT

53

Có một vài cách để khắc phục điều này nhưng tôi đã tìm thấy git stash làm việc tốt cho tôi. Nó tạm thời đặt các thay đổi cục bộ của bạn vào một nơi khác. Sau đó, bạn có thể kéo, để lấy các thay đổi mới nhất. Và sau đó bạn có thể nhận lại các thay đổi cục bộ của mình.

Chỉ cần như thế này:

$ git pull 
... 
... 
file your_file.rb not up to date, cannot merge. 

$ git stash 
$ git pull 
$ git stash pop 
+1

@yuit: Nếu điều này giải quyết được cho bạn, bạn nên chấp nhận câu trả lời này – kynan

+9

Từ câu hỏi gốc: _ "Tôi cũng đã thử" git stash "theo sau là" git pull ". Không đi." _ –

20

loại này của vấn đề thường gây ra bằng cách cố gắng để kéo từ một kho lưu trữ có hai tên tập tin mà chỉ khác nhau trong trường hợp. Nếu bạn đang ở FAT, NTFS trong chế độ không phân biệt dạng chữ (về cơ bản, bất kỳ lúc nào nó được sử dụng trong Windows), hoặc HFS + trong chế độ phân biệt dạng chữ và có hai tệp "foobar" và "FOOBAR", thì Git sẽ thấy hai các tệp, nhưng hệ thống tệp sẽ chỉ thấy một tệp, điều này sẽ gây ra tất cả các loại sự cố. Git sẽ kiểm tra, nói, "FOOBAR", và sau đó kiểm tra "foobar", mà hệ thống tập tin nhìn thấy chỉ đơn giản là thay thế các nội dung của "FOOBAR" nhưng để nó tại chỗ. Bây giờ để Git, nó xuất hiện rằng "FOOBAR" đã được thay thế bằng nội dung của "foobar", và "foobar" đã biến mất.

Có hai biểu hiện khác nhau của vấn đề cơ bản này. Một là khi kho lưu trữ của bạn thực sự chứa hai tệp chỉ khác nhau về trường hợp. Trong trường hợp này, bạn cần phải làm việc trên một hệ thống tệp phân biệt chữ hoa chữ thường, hoặc bạn sẽ cần chỉnh sửa kho lưu trữ để đảm bảo rằng không có xung đột nào xảy ra; một hệ thống tệp không phân biệt chữ hoa chữ thường không thể lưu trữ nội dung của kho lưu trữ này.

Một trường hợp khác mà bạn có thể giải quyết là khi việc đổi tên xảy ra thay đổi trường hợp của tệp. Ví dụ: giả sử kho lưu trữ Git chứa tên đổi từ "EXAMPLE" thành "example". Trước khi Git kiểm tra phiên bản mới, nó sẽ thử và kiểm tra để đảm bảo rằng nó không ghi đè lên một số tệp hiện có mà bạn có trên đĩa của mình. Vì nó cho rằng "example" là tên tệp mới, nó sẽ hỏi hệ thống tệp nếu nó tồn tại và hệ thống tệp sẽ thấy "VÍ DỤ" và nói có, vì vậy Git sẽ từ chối kiểm tra phiên bản mới vì nó cho rằng nó sẽ ghi đè các tập tin không được theo dõi. Trong trường hợp này, nếu bạn không có thay đổi cục bộ nào mà bạn quan tâm, thì đơn giản, git reset --hard <revision-to-checkout> thường sẽ đủ để bạn vượt qua vấn đề và sửa đổi mới.Chỉ cần thử và nhớ không đổi tên tệp thành các tên khác chỉ khác nhau trong trường hợp nếu bạn đang sử dụng hệ thống tệp phân biệt dạng chữ, vì nó sẽ gây ra các sự cố như thế này.

5

Có thể có vấn đề với quyền đối với tệp. Git cũng đang phiên bản chúng, trừ khi config nói khác đi. Chỉ cần thêm câu trả lời này cho những người có gần như nhưng không phải là vấn đề tương tự.

7

Để biết thêm chi tiết về bài đăng của @Brian Campbell (vì đặt lại cứng không hoạt động), tôi muốn chỉ ra một trường hợp cạnh đã dừng tôi.

Tôi đã chuyển một tệp OldFile vào một thư mục khác và đổi tên thành NewFile. Sau đó tôi đã gắn cờ tệp là assume-unchanged.

Điều này đã ngăn tôi chuyển đổi các chi nhánh và không có stash để lưu hoặc cam kết đẩy. Vấn đề là tôi đã không cam kết thay đổi tệp này bằng tên mới trước khi đặt cờ assume-unchanged. Vì vậy, tôi đặt nó trở lại no-assume-unchanged, cam kết nó, sau đó đặt nó trở lại assume-unchanged và tôi có thể chuyển đổi chi nhánh một lần nữa.

+0

Câu trả lời này đặt tôi đi đúng hướng, cảm ơn. Tôi đã sử dụng "git ls-files -v | grep '^ [[: lower:]]' | awk '{print $ 2}' | xargs git update-index - không-giả định-không thay đổi" để đặt lại cờ giả định không thay đổi , sau đó tôi đã có thể đặt lại - không có lỗi. – ocroquette

+0

Tôi nghĩ rằng điều này cũng áp dụng cho bất kỳ tệp nào được đánh dấu 'giả định không thay đổi', tôi đã có cùng một vấn đề cho bỏ qua những thay đổi đối với tệp cục bộ có tên gốc của nó.Nhận xét của bạn nhắc tôi rằng tôi đã đánh dấu tệp đó, cảm ơn! –

+2

Tôi có cùng một vấn đề. Về cơ bản "giả định không thay đổi" là một tính năng độc ác. Một khi bạn sử dụng nó, nó làm cho nó rất khó để kiểm tra các chi nhánh khác. Ngay cả khi bạn sử dụng 'checkout -f', nó sẽ thất bại. –

2

Tôi đã gặp sự cố tương tự (Windows 10): Tôi đã ở số branchA và muốn truy cập master. Tôi đã có một số thay đổi không được đề cập nên trước tiên, tôi git stash rồi git checkout -f master nhưng tôi vẫn nhận được Entry 'fileName' not uptodate. Cannot merge.

git status không hiển thị bất kỳ điều gì để cam kết.

Cuối cùng tôi vừa xóa tệp theo cách thủ công và tôi có thể chuyển đến nhánh khác (tất nhiên là tệp của tôi đã trở lại) vì vậy tôi đoán đã có lỗi trong git ở đâu đó.

+0

Đây là giải pháp duy nhất cho câu hỏi này có hiệu quả đối với tôi. Tôi đã gặp lỗi với tệp '.gitignore'! Mặc dù tôi đã không thực hiện bất kỳ thay đổi nào, và git sẽ không cho phép tôi "cất giấu" nó (bởi vì không có thay đổi cục bộ nào, duh!). Vì vậy, tôi đã di chuyển tệp '.gitignore' ra bên ngoài kho lưu trữ (như một loại" sao lưu ") và sau đó thực hiện một' git reset --hard', mà "cố định" kho lưu trữ thành trạng thái sane. –

1

Điều này có thể xảy ra nếu bạn cập nhật các chỉ số để bỏ qua một số tập tin:

git update-index --assume-unchanged <file> 

và sau đó ví dụ như kiểm tra một số chi nhánh khác:

git checkout <branch> 
> error: Entry '<file>' not uptodate. Cannot merge. 

Buộc chỉ số làm mới sửa chữa vấn đề:

git update-index --really-refresh 
<file>: needs update 

Được theo dõi bởi:

git reset --hard 

Và sau đó mọi thứ sẽ trở lại bình thường.

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