2013-06-07 14 views
37

Tôi đang cố gắng đẩy tệp của mình vào github bằng bash. Họ đã ở trên đó, và tôi đang tải lên một phiên bản mới hơn với những đường nét mới và mã, vv Tuy nhiên, khi tôi cố gắng git add và sau đó git status nó nói:Tại sao không git nhận ra rằng tệp của tôi đã bị thay đổi, do đó git add không hoạt động

On thạc sĩ ngành

gì để cam kết, làm việc thư mục sạch

Và tệp tôi đang sử dụng vừa được sửa đổi.

+4

nếu bạn đã cam kết, sau đó bạn sẽ không có gì để cam kết, hãy kiểm tra git log. –

+2

đầu ra của git diff là gì? – maazza

+0

@maazza Tôi không nhận được gì từ git diff – somerandomguy

Trả lời

5

cũng chúng tôi không có đủ để trả lời câu hỏi này vì vậy tôi sẽ cung cấp cho bạn một số dự đoán:

1), bạn có cất giấu những thay đổi của bạn, để khắc phục loại: git stash pop

2) bạn đã thay đổi và bạn cam kết với họ, bạn sẽ có thể thấy cam kết của mình trong git log

3) bạn đã thay đổi một số loại git reset --hard hoặc khác, thay đổi của bạn có thể có trong reflog, nhập git reflog --all. ref nếu bạn đã bao giờ tìm thấy nó.

4) bạn đã kiểm tra cùng một lần repo nhiều lần và bạn đang ở sai.

+0

1) không có stash tìm thấy 2) Tôi đã thay đổi và cam kết, vì vậy tôi có thể cam kết một lần nữa? 3) Tôi đã không làm điều đó 4) Tôi đang ở trong repo đúng – somerandomguy

+0

nếu bạn đã thay đổi và cam kết, sau đó bạn tốt đi đến bước tiếp theo, đẩy hoặc bất kỳ công việc của bạn là ... Bạn có thể cam kết một lần nữa nếu bạn có nhiều thay đổi hơn, thậm chí bạn có thể 'git commit --amend' sẽ đưa các thay đổi mới của bạn vào lần commit cuối cùng của bạn, đừng làm điều đó nếu bạn đã chia sẻ commit của bạn. –

4

Đã có một điều thú vị như thế này xảy ra. Plugin git Eclipse Kepler đã tự động đánh dấu tất cả các thư mục dự án của tôi là bị bỏ qua trong thư mục .gitignore.

Khi tôi nhận được commit trên menu Team, tất cả sẽ được đặt trở lại bị bỏ qua. Theo như tôi có thể nói, điều này là bởi vì tôi muốn đặt chúng như là nguồn gốc trong dự án cha mẹ. Bỏ đánh dấu chúng là dervied đã sửa lỗi này. Tôi chưa bao giờ thấy điều này trước đây về Indigo. Hy vọng nó sẽ giúp someon.

49

Tôi đã gặp sự cố trong đó một lần tôi đặt chỉ mục git thành 'giả định không thay đổi' trên tệp của mình.

Bạn có thể nói git để ngăn chặn bỏ qua thay đổi đối với tập tin với:

git update-index --no-assume-unchanged path/to/file 

Nếu điều đó không giúp một reset có thể đủ đối với trường hợp kỳ lạ khác.


Trên thực tế tôi thấy loại bỏ các tập tin lưu trữ và cài đặt lại nó để làm việc:

git rm --cached path/to/file 
git reset path/to/file 

Các git rm --cached nghĩa để chỉ loại bỏ các tập tin từ các chỉ số, và reset nói git để tải lại các chỉ số git từ cam kết cuối cùng.

+0

'git add -f path/to/the/file' nó sẽ thêm mạnh các tệp cho cam kết. – San

+0

Câu trả lời này là câu trả lời duy nhất giúp khắc phục sự cố của tôi. Không chắc chắn nếu đó là một điều Windows (tôi đã ** không bao giờ ** có bất kỳ vấn đề như thế này trong quá khứ, hoặc trong osx hoặc linux). Vì vậy, nhờ @ThorSummoner. Btw, tôi đã thử 'git add -f' tập tin trong trạng thái" giả định không thay đổi "này, và nó đã làm ** không ** làm việc - phải có' git update-index' hoặc 'git rm --cached' theo sau bằng 'git reset' để làm cho nó hoạt động. – rsenna

+0

Ngoài ra, nếu bạn thực sự không chắc chắn về trạng thái hiện tại của repo, hãy làm như sau: 'git rm --cached -r .' và sau đó' git reset .'. – rsenna

0

Bạn đã tải lên loại tệp nào? Bây giờ tôi chỉ mất gần một giờ để tải lên sửa đổi css của tôi. Nhưng css này được biên dịch từ một tập tin kiểu dáng do đó git chỉ bỏ qua nó. Khi tôi thay đổi nguồn gốc thì mọi thứ đã hoạt động.

Hy vọng điều đó sẽ hữu ích.

5

Một lý do khác có thể xảy ra (điều này hóa ra là đúng trong trường hợp hiện tại của riêng tôi).Kiểm tra tệp .gitignore của bạn. Bạn có thể thấy rằng tệp hoặc phần mở rộng của tệp bạn đang cố gắng làm việc với được nhập ngũ vào .gitignore, điều này sẽ giải thích tại sao tệp đó không được nhận dạng dưới dạng tệp đã thay đổi.

+0

Thêm một số giải thích thêm; sẽ giúp người khác. –

+0

Tôi đã sử dụng [gitignore.io] (http://gitignore.io) để tạo ra .gitignore và tôi đã tìm thấy một dòng với 'lib /', điều làm cho git bỏ qua thư mục này. Không có vấn đề với điều đó - ít nhất là nếu thư mục này không phải là thư mục chính từ dự án của bạn, như những gì đã xảy ra với tôi. – Paladini

+0

Và đối với bất kỳ ai trong trường hợp của tôi, đó thực sự là loại trừ toàn cầu của tôi – vpzomtrrfrt

0

Tôi gặp sự cố này. Tôi đã không làm việc vì tôi đã đặt các tập tin của tôi trong thư mục .git bên trong dự án của tôi.

0

Nói chung với vấn đề này, trước tiên hãy kiểm tra xem bạn có đang chỉnh sửa tệp mà bạn cho là không! Tôi đã có vấn đề này khi tôi đã chỉnh sửa một tập tin JavaScript transpiled thay vì tập tin nguồn (phiên bản transpiled không được dưới sự kiểm soát nguồn).

0

Ứng dụng khách Git của tôi (Gitg) đã gây ra sự cố này cho tôi. Các lệnh thông thường mà tôi thường chạy không hoạt động. Thậm chí chạm vào mọi tập tin trong dự án cũng không hoạt động.

Tôi đã tìm được cách khắc phục sự cố và tôi vẫn không chắc chắn nguyên nhân gây ra lỗi đó. Sao chép thư mục dự án của bạn. Các tệp bị thiếu sẽ hiển thị trong thư mục được sao chép git status. Đổi tên có thể làm điều tương tự.

-3

cố gắng sử dụng git add * sau đó git commit

+0

Chào mừng bạn đến với SO! Điều này có thể không trả lời câu hỏi và đã có 9 câu trả lời ở đây. Hãy biến những nỗ lực của bạn thành những câu hỏi cần trả lời! –

0

TL; DR; Bạn có ngay cả trên kho lưu trữ chính xác không?

Câu chuyện của tôi hơi buồn cười nhưng tôi nghĩ điều đó có thể xảy ra với một người có thể có kịch bản tương tự để chia sẻ nó ở đây.

Thực tế trên máy của tôi, tôi có hai kho lưu trữ git riêng biệt repo1repo2 được định cấu hình trong cùng thư mục gốc có tên source. Hai kho này về cơ bản là kho của hai sản phẩm tôi làm việc và làm việc trong công ty của tôi. Bây giờ vấn đề là như một hướng dẫn tiêu chuẩn, cấu trúc thư mục của mã nguồn của tất cả các sản phẩm là hoàn toàn giống nhau trong công ty của tôi.

Vì vậy, mà không nhận ra tôi đã sửa đổi cùng một tệp có cùng tên trong repo2 mà tôi được cho là thay đổi trong repo1. Vì vậy, tôi chỉ giữ lệnh git status chạy trên repo1 và nó giữ cho cùng một thông điệp

On thạc sĩ ngành

gì để cam kết, thư mục sạch

làm việc trong nửa giờ. Sau đó, đồng nghiệp của tôi đã quan sát nó như là cặp mắt độc lập và đưa điều này đến thông báo của tôi rằng tôi đã ở trong kho lưu trữ tìm kiếm sai nhưng rất giống nhau. Khoảnh khắc tôi chuyển sang repo1 Git bắt đầu nhận thấy các tệp đã thay đổi.

Trường hợp không phổ biến. Nhưng bạn không bao giờ biết!