2015-02-03 14 views
5

Dường như tôi đã bằng cách nào đó nhận git vào trạng thái trong đó nó sẽ không cam kết vì một tập tin hình đã bị xóa không tồn tại:git sẽ không cam kết vì một tập tin bị xóa không tồn tại

 
~/src$ git status -u 
# On branch master 
# Your branch is ahead of 'origin/master' by 5 commits. 
# (use "git push" to publish your local commits) 
# 
# Changes to be committed: 
# (use "git reset HEAD ..." to unstage) 
# 
# deleted: release-vars.sh 
# 
~/src$ git commit -a 
fatal: pathspec 'release-vars.sh' did not match any files 
~/src$ ls release-vars.sh 
ls: cannot access release-vars.sh: No such file or directory 

Bất kỳ ý tưởng nào về cách giải quyết tình huống này?

+0

Có thể trùng lặp với điều này? [git-rm-fatal-pathspec-did-not-match-any-files] (https://stackoverflow.com/questions/25458306/git-rm-fatal-pathspec-did-not-match-any-files) –

+0

Không thực sự, đó là cho một trường hợp đặc biệt đối phó với các tệp LARGE, không phải là trường hợp tệp nhỏ nhất. – UpAndAdam

+0

Đây có phải là vấn đề với độ nhạy trường hợp trên hệ thống tệp không? – Ivo

Trả lời

-1

Tôi khuyên bạn nên bắt đầu bằng cách dàn dựng các thay đổi theo cách thủ công bằng cách sử dụng git add FILENAMEgit rm FILENAME trước khi thực hiện cam kết không có tùy chọn -a. (ví dụ: chỉ cần đi git commit -m "SOME MESSAGE")

git commit -a nói để tự động điều chỉnh các tệp đã bị sửa đổi và xóa. Khi bạn đang cố gắng để loại bỏ một tập tin từ git mà vẫn có thể tồn tại tại địa phương này sẽ có vấn đề.

Rõ ràng về những gì bạn đang làm hiếm khi là một điều xấu và có thể dễ dàng giải quyết vấn đề.

Nếu điều đó không hiệu quả; hãy thử làm git reset và sau đó thử làm mới.

Một tùy chọn khác được cung cấp bởi git help rm là như sau:

Nếu tất cả các bạn thực sự muốn làm là để loại bỏ từ chỉ mục các tập tin mà không còn hiện diện trong cây làm việc (có lẽ vì làm việc của bạn cây là bẩn để bạn không thể sử dụng git commit -a), sử dụng lệnh sau:

 git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached 
+0

Cảm ơn lời khuyên. Nhưng tôi phải làm gì bây giờ? –

+0

@SteveEmmerson Bạn đã cố gắng cam kết không có tùy chọn '-a'? Chỉ là một 'git commit' trần? –

+0

@SteveEmmerson điều gì sẽ xảy ra, nếu bạn thử git 'rm --cached release-vars.sh' và sau đó' git commit -m 'loại bỏ release-vars.sh "' – UpAndAdam

0

-a là exp cam kết bảo nó cam kết phiên bản hiện tại của mọi tệp được theo dõi hiện tại từ nội dung trong bảng tính của bạn. Nó không hoàn toàn giống với hoạt động như

git add --all 

có thể là những gì bạn đang ở đây. Sau đó thực hiện một cam kết thông thường.

Nếu thông số .gitignore của bạn để lại dấu vết không được kiểm soát, bạn không muốn theo dõi bạn thay vì git rm --cached tệp đã xóa một cách rõ ràng để git commit -a tiếp theo của bạn không đi qua tệp bị thiếu bất ngờ.

+0

'git add --all' không giải quyết được tình huống. –

+0

Nó xóa trên hệ thống của tôi. Cam kết nói gì khi bạn thực hiện 'git add --all' trước khi commit? – jthill

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