2010-12-14 39 views
11

Tôi có tệp được sửa đổi mà tôi muốn hoàn nguyên về bất kỳ nội dung nào trong cam kết mới nhất nhưng bị "kẹt" ở đó luôn được đánh dấu là đã sửa đổi.Không thể đặt lại tệp cho một cam kết cụ thể bằng cách sử dụng Git

$ git status 
# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: index.php 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

sau đó tôi thử:

$git checkout -- index.php 

Nhưng đầu ra của tình trạng git vẫn là như nhau. Sau đó, tôi thử:

$git reset --hard master 
HEAD is now at 02c9613 test commit message 

Và đầu ra của trạng thái git là STILL giống nhau.

Bất kỳ ý tưởng nào về cách tôi có thể loại bỏ các thay đổi được giả định trên tệp đó?

+0

Có loại sửa đổi nào? – Cascabel

+2

Kết quả của 'git diff' là gì. Nó có mùi như http://stackoverflow.com/search?q=[git]+autocrlf. – Rudi

+0

Các khác cho thấy chủ yếu là kết thúc của những thay đổi dòng. Lưu ý rằng tôi chưa thay đổi tệp này. Điều này xuất phát từ một thành viên mới của nhóm. Tôi sẽ xem xét liên kết của Rudi. – Julian

Trả lời

3

Bạn có thể đang chạy vào một số whitespace issue thử git config --global apply.whitespace nowarn cho điều đó.

Nếu điều đó không hiệu quả, tôi cho rằng bạn đã gặp phải lỗi. Lưu bản sao cục bộ để tham khảo trong tương lai (Tôi hy vọng nó không quá lớn) và tạo một báo cáo lỗi. Đặc biệt là sự kiện rằng:

  • bạn không sửa đổi các tập tin mình
  • file khác không hiển thị vấn đề này

là dấu hiệu cho thấy nó có thể chỉ là không thể với bạn rằng đã sai lầm ở đây . Cho dù bạn có thể tái tạo vấn đề trên một repo sạch sẽ là thông tin thú vị quá.

+0

Nhân bản repo một lần nữa và nó hoạt động tốt. Dường như không thể tái tạo lỗi trong repo mới. Thật không may mã ở đây không phải là mã nguồn mở vì vậy tôi không thể gửi nó trong báo cáo lỗi: ( – Julian

3

Bạn phải xóa index.php khỏi "chỉ mục". Sau đó, bạn có thể kiểm tra phiên bản khác.

git rm --cached index.php 

Nên thực hiện thủ thuật. Xem:

http://www.kernel.org/pub/software/scm/git/docs/git-rm.html

+1

Đầu ra 'git status' của Julian không hiển thị bất cứ thứ gì đang được thêm vào chỉ mục. – jamessan

+0

Mike, khi tôi chạy lệnh git rm, git muốn tôi thực hiện các thay đổi có vẻ lạ vì tôi không muốn làm gì với tệp này; Tôi chỉ muốn nó được chính xác như nó cho thấy trong github. – Julian

1

Bạn đã thử:

$ git checkout master -f -- index.php 

hoặc

$ git checkout master -f 

?

Tôi không thể thấy lý do tại sao điều này sẽ hoạt động nếu reset không, nhưng đáng để thử.

+0

Gauthier, lệnh đầu tiên bạn đề cập không có hiệu lực. Nhưng thứ hai đã làm điều gì đó rất thú vị. Trong khi nó không làm bất cứ điều gì lúc đầu, tôi quyết định sửa đổi một số tập tin khác, và trạng thái git đánh dấu nó là sửa đổi. Sau khi tôi chạy đề xuất thứ hai của bạn, tệp đã sửa đổi của tôi đã trở lại trạng thái ban đầu của nó trong khi index.php vẫn được giữ nguyên như đã sửa đổi! Tôi rất gần với nhân bản repo từ gốc một lần nữa. – Julian

+0

Tôi khuyên bạn nên chạy 'git diff' như đã đề xuất ở trên. – Gauthier

+1

"git checkout master -f" đã giúp tôi! thanks –

0

FWIW, tôi đã có thể giải quyết vấn đề bằng cách xóa các thư mục con .git trong các thư mục đang được sửa đổi. Khi các thư mục con .git (như các thư mục con là các dự án .git trong và của chính chúng) đã biến mất, các thư mục cha không còn được sửa đổi nữa. Nếu các tệp được đề cập nằm trong cùng một thư mục với một thư mục .git không liên quan, điều đó cũng có thể có hiệu lực.

1

thử git ls-files -m | xargs -i git update-index --assume-unchanged "{}"

+0

Chỉ cần cẩn thận, bạn sẽ phải xóa cờ đó để xem lại các thay đổi bằng cách sử dụng '--no-giả-không thay đổi' – d4Rk

0

Tôi đã mắc kẹt trong cùng một mớ hỗn độn. Tôi đã có một số tập tin tôi chỉ không thể thoát khỏi trong git status. Sau khi thử đặt lại hoặc kiểm tra các tệp theo bất kỳ cách nào, tôi quyết định thêm các tệp có vấn đề và cam kết chúng. Git có vẻ hạnh phúc với nó. Sau đó tôi quay trở lại cam kết trước đó và vấn đề đã được giải quyết, các tệp có vấn đề đã thực sự biến mất.

Nó không giải thích được lỗi, nhưng nếu giải pháp này có thể giải quyết thì đó là một điều tốt.

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