힘내 : “변경되었지만 커밋되지 않은”상태에서 완고하게 멈춘 파일 2 개를 되 돌리는 방법은 무엇입니까? but not updated: #

로컬로 변경 한 것으로 추정되는 두 개의 파일이있는 저장소가 있습니다.

그래서 나는 이것에 붙어 있습니다.

$ 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:   dir1/foo.aspx
#       modified:   dir2/foo.aspx
#
no changes added to commit (use "git add" and/or "git commit -a")

Doing git diff은 사실이 아닌 것처럼 보이지만 전체 파일 내용이 변경되었다고 말합니다.

흥미롭게도이 파일을 로컬로 변경 한 기억이 없습니다. 이 저장소는 하나의 원격 저장소 (개인, GitHub.com, FWIW)와 함께 사용됩니다.

내가 무엇을 시도하든 이러한 로컬 변경 사항을 삭제할 수 없습니다. 나는 모두를 시도했다 :

$ git checkout -- .
$ git checkout -f
$ git checkout -- dir1/checkout_receipt.aspx
$ git reset --hard HEAD
$ git stash save --keep-index && git stash drop
$ git checkout-index -a -f

, Git에서 단계 화되지 않은 변경 사항을 어떻게 폐기합니까?에 설명 된 모든 것을 시도했습니다 .게다가. 그러나 2 개의 파일은 “변경되었지만 커밋되지 않은”상태로 남아 있습니다.

도대체 두 개의 파일이 이렇게 멈춰 있고 겉보기에는 “테이블을 되돌릴 수 없음”으로 보이는 이유는 무엇입니까 ??

PS는 이미 시도 것 명령을 보여주는 위의 목록에서, 내가 잘못 쓴 git revert내가 의미하는 경우 git checkout. 미안하고 노력해야한다고 대답 해주신 분들께 감사드립니다 checkout. 나는 그것을 수정하기 위해 질문을 편집했습니다. 나는 이미 시도했다 checkout.



답변

파일의 줄 끝은 무엇입니까? 나는 그들이 CRLF라고 확신합니다. 그렇다면이 가이드를 확인하세요. http://help.github.com/line-endings/

간단히 말해, 커밋시 줄 끝을 LF로 변환하도록 git이 설정되어 있는지 확인한 다음 해당 파일을 커밋해야합니다. 저장소의 파일은 항상 LF 여야하며 체크 아웃 된 파일은 git을 올바르게 설정했다고 가정하고 OS의 기본 파일이어야합니다.


답변

비슷한 문제를 해결하기 위해 몇 시간을 보냈습니다. 체크 아웃 한 원격 지점에서 모든 파일을 삭제하고 git checkout -f다시 실행할 때에도 4 개의 파일이 ‘변경되었지만 업데이트되지 않음’으로 완고하게 표시되었습니다 (또는이 게시물의 다른 변형)!

이 4 개의 파일은 필요했지만 내가 수정 한 것은 아닙니다. 내 마지막 해결책은 Git이 변경되지 않았다고 설득하는 것입니다. 다음은 모든 체크 아웃 된 파일에 대해 작동하며 ‘수정 됨’상태를 표시합니다. 실제로 수정 된 파일을 이미 커밋 / 숨겨 놓았는지 확인하십시오! :

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

그러나 Mac OSX에서는 xargs가 약간 다르게 작동합니다 (주석의 경우 Daniel).

git ls-files -m | xargs -I {} git update-index --assume-unchanged {}

나는 이것을 다음 시간을 위해 자리 표시 자로 추가했지만 다른 사람에게도 도움이되기를 바랍니다.

-알


답변

이것은 내 경우에 동일한 문제를 해결하는 방법입니다. open .gitattributes change :

* text=auto

에:

#* text=auto

힌트를 위해 @Simon East에게 감사드립니다.


답변

또 다른 가능성은 차이점 (체크 아웃 명령으로 이러한 파일을 되 돌리지 못하게하는)이 파일 모드 중 하나라는 것입니다. 이것은 나에게 일어난 일입니다. 내 버전의 git에서는 다음을 사용하여 찾을 수 있습니다.

git diff dir1 / foo.aspx

그리고 파일 모드 변경을 보여줍니다. 그래도 되돌릴 수는 없습니다. 그 사용을 위해

git config core.filemode false

또는 추가하여 텍스트 편집기에서 git .config를 변경하십시오.

[핵심]

filemode = false

이렇게하면 다음을 사용할 수 있습니다.

git reset HEAD dir1 / foo.aspx

파일이 사라져야합니다.

(이 모든 것은 어떻게 git ignore mode changes (chmod)? )에 대한 답변에서 얻었습니다.


답변

하려고 노력하다 로컬 변경 사항 되 돌리십시오 .

git checkout -- dir1/foo.aspx
git checkout -- dir2/foo.aspx


답변

수정 된 것으로 표시되는 일부 팬텀 변경 파일이 있었지만 실제로는 동일했습니다.

이 명령을 실행하면 때때로 작동합니다.
(git의 “스마트”하지만 종종 도움이되지 않는 줄 끝 변환을 끕니다)

git config --local core.autocrlf false

그러나 다른 경우 .gitattributes에는 일부 줄 끝 설정이있는 루트 의 파일 로 인해 autocrlf꺼져 있어도 특정 파일 에 적용하려고 했습니다. 실제로 도움이되지 않았기 때문에을 삭제 .gitattributes하고 커밋했으며 파일이 더 이상 수정 된 것으로 표시되지 않았습니다.


답변

git checkout dir1/foo.aspx
git checkout dir2/foo.aspx