Git에서 변경 사항을 무시할 수없는 것 같습니다.


125

명령 줄에서 다음을 확인한 후 :

# On branch RB_3.0.10
# 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.htm

다음 명령을 입력하여 변경 사항을 취소하려고합니다.

git checkout -- index.htm

하지만 git status를 다시 실행하면 똑같이 보입니다. 결제가 작동하지 않는 것 같습니다. 내가 뭘 잘못하고 있니? Windows / cygwin에서 GIT 1.6.1.2를 사용하고 있습니다.

# On branch RB_3.0.10
# 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.htm

4
합니까는 git checkout HEAD -- index.htm작업 (대신 인덱스에서 체크 아웃에, 마지막으로 커밋 된 상태에서 체크 아웃)?
Jakub Narębski

3
git checkout HEAD -- index.htm나를 위해 일했습니다!
Ben Tideswell 2014

답변:


52

이것은 한동안 나를 괴롭 혔고, 내가 확인한 거의 모든 저장소에는 내가 버릴 수없는 변경 사항이있었습니다. 간단히 말해서, 나는 위의 모든 것을 시도했지만 아무것도 작동하지 않았습니다. 다음은 Mac에서 정상으로 돌아 가기 위해 제가 한 작업입니다.

Completely remove the autocrlf & safecrlf settings from ~/.gitconfig
Completely remove the autocrlf & safecrlf settings from your repo's local config ./.git/config
git rm --cached -r .
git reset --hard

7
위의 모든 것을 시도한 후 이것이 저에게 효과가 있었던 유일한 방법입니다 (Windows에서)
Anders

감사합니다! Anders가 말했듯이이 솔루션은 저에게도 효과적입니다. 나는 #의 autocrlf로 autocrlf 교체
데이비드

37

내 경험은 다음과 같습니다 .git/config.

[core]
    autocrlf = false
    safecrlf = false
    eol = crlf

그런 다음 실행 $ git checkout HEAD .하면 작동합니다. 하지만 $ git checkout -- .이상하지 않습니다!

* 자식 버전 1.9.3


35

git diff파일에 어떤 변경 사항이 표시됩니까? Windows에서 이와 같은 문제를 일으키는 줄 끝 문제를 보았습니다. 이 경우 git config core.autocrlf및에 대한 설정을 확인하십시오 git config core.safecrlf. 여기에 이러한 설정에 대한 몇 가지 설명서가 있습니다 .

git svnSubversion과의 통합을 위해 사용 하는 경우 autocrlf꺼져 있는지 확인하십시오 . 내가 알 수있는 것은이 구성에서 방금 손상되었으며 변경 checkout사항을 되돌리기 위해 a 를 수행했을 때 대부분의 도구가 파일이 변경되었다고 생각하게 만듭니다 .

당신이 할 문제가 표시되면 git checkout다음 git status파일이 여전히 수정 쇼 및 git diff쇼 파일이 파일의 모든 줄에 수정을, 다음이 당신이보고있는 문제입니다.

core.autocrlf

true이면 git이 파일 시스템에서 읽을 때 텍스트 파일의 행 끝에서 CRLF를 LF로 변환하고 파일 시스템에 쓸 때 반대로 변환합니다. 변수는 입력으로 설정할 수 있습니다.이 경우 변환은 파일 시스템에서 읽는 동안에 만 발생하지만 파일은 행 끝에서 LF로 기록됩니다. 현재 "텍스트"를 고려할 경로 (즉, autocrlf 메커니즘의 적용을 받음)는 순전히 내용에 따라 결정됩니다.

core.safecrlf

true이면 core.autocrlf에 의해 제어되는 CRLF 변환이 되돌릴 수 있는지 확인합니다. Git은 명령이 작업 트리의 파일을 직접 또는 간접적으로 수정하는지 확인합니다. 예를 들어 파일을 커밋 한 다음 동일한 파일을 체크 아웃하면 작업 트리에 원본 파일이 생성됩니다. core.autocrlf의 현재 설정에 해당하지 않는 경우 git은 파일을 거부합니다. 변수는 "warn"으로 설정 될 수 있으며,이 경우 git은 되돌릴 수없는 변환에 대해서만 경고하고 작업을 계속합니다. ...


core.autocrlf = true core.safecrlf가 설정되지 않았습니다. Windows의 경우 true로 설정해야합니까? 둘의 차이점은 무엇입니까?

git svn을 사용하는 경우 둘 다 꺼 두십시오. 좀 더 자세하게 추가했습니다.
1800 INFORMATION

4
나는 그가 그것을 적어도 90도 회전시키는 것을 의미한다고 가정하고있다
vijrox

2
core.autocrlf와 core.safecrlf를 모두 true로 설정하면 'git reset --hard HEAD'를 실행하여 문제가되는 파일에서 감지 된 변경 사항을 삭제할 수있었습니다.
Aleksey

19

통과해야 할 것 같아요 -f

man 페이지 ( man git-checkout, GIT-CHECKOUT (1))에서 :

-f, --force
인덱스 또는 작업 트리가 HEAD와 다른 경우에도 진행합니다.
이것은 로컬 변경 사항을 버리는 데 사용됩니다 .

예를 들어 현재 분기의 변경 사항을 무시하고 다른 분기로 전환합니다.

git checkout -f master

7
-f를 무엇에 전달합니까? 응답 완료하기 위해 좋은 것
PandaWood

@Matt 내 의도는 다른 지점을 확인하는 것이 아닙니다. 정말 기억하지만, 질문에 의해 판단하지 않도록 대답은 2009 년부터, 나는 내가 전달하는 의미 생각 -f체크 아웃에 - <파일 이름>에서와 같이git checkout -f -- filename
하센

@hasen 당신이 해명을 요구했던 세 가지 코멘트, 이것이 제가 "예를 들어"를 추가 한 이유입니다. 이 예는 다른 사용을 배제하지 않습니다.-f
Matt H

나를 위해 일했습니다. git checkout -f master"이미 '마스터'에"를 던졌지 만 변경 사항은 사라졌습니다.
기독교

12

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

git diff index.htm

그리고 파일 모드 변경 사항을 보여줍니다. -f 옵션을 사용하더라도 체크 아웃을 사용하여 되돌릴 수는 없습니다. 그 사용을 위해

git config core.filemode false

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

[핵심]

filemode = false

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

git reset HEAD index.htm

파일이 사라져야합니다.

(이 모든 내용은 git ignore mode changes (chmod)updates-file-permissions-only-in-git에 대한 답변에서 모두 얻었습니다 )


무리 감사! 다른 제안 중 어느 것도 파일 모드 변경을 제거하는 데 도움이되지 않았습니다.
Thorkil Værge

6

OSX 또는 Windows를 사용하십니까? 그렇다면 문제는 아마도 대소 문자가 다른 동일한 이름의 두 파일을 가지고있는 것입니다. 예. index.htm 및 Index.htm

Windows 및 기본적으로 OSX는 대소 문자를 구분하는 git과 충돌하는 대소 문자를 구분하지 않는 파일 시스템을 사용합니다.


2

나는이 문제가 있었고 위의 모든 것을 시도한 후에도 아무것도 작동하지 않았습니다.

나를 위해 일한 것은 파일이 있던 디렉토리를 삭제 한 다음 해당 디렉토리의 git status모든 파일이 이제 삭제 된 것으로 표시되었는지 확인하는 것입니다. 그 후 나는 단순히 git checkout -f했고 모든 것이 정상으로 돌아 왔습니다.


1

나는 libGDX프로젝트를 진행하고 Android Studio있었고 내가 한 모든 변경 사항을 버리고 싶었고 아무것도 효과가 없었습니다. 내가 생각 해낸 해결책은 모든 변경 사항을 새 브랜치에 커밋하는 것이 었습니다.

git checkout -b TRASH
git add .
git commit -m "discarded changes"
git checkout master

TRASH원하는 경우 분기를 삭제할 수 있습니다 .


1

나는 같은 문제가 있었고 위의 의견에서 아무것도 작동하지 않았습니다. 내 파일 시스템은 대소 문자를 구분하지 않고 (osx 기본값이지만 창은 동일하게 작동 할 수 있음) 파일이 동일한 디렉토리에 서로 다른 내용으로 대문자와 소문자로 모두 존재한다는 것이 밝혀졌습니다. 내 컴퓨터에서 두 이름이 동일한 파일을 가리 키기 때문에 git status는 내가 무엇을하든 항상 수정을 보여주었습니다. 문제를 해결하려면 :

  • 다른 컴퓨터에서 파일 중 하나를 제거하고 저장소로 푸시해야했습니다.

  • 전체 로컬 버전을 완전히 삭제

  • 처음부터 git 클론 수행


0

존재하지 않거나 변경된 파일을 버릴 수없는 유사한 문제가 발생했습니다. 저는 직장에서 Visual Studio를 사용하는데 앱이 실행되는 동안 분기를 전환 할 때 이런 일이 발생한다는 것을 알았습니다.

git checkout버려도 도움이되지 않았습니다. 작동하지 않거나 허가가 없다는 것만 알려줄 것입니다.

효과가있는 솔루션 :

  1. 안전 모드 로 이동
  2. 파일 폐기

다시 시작하는 것은 고통 스럽지만 100 가지를 시도하는 것보다 빠르게 작동했습니다.


0

쉬운 해결책이 있습니다. 이런 일이 발생하고 (일반적으로 예상치 못한 Windows 종료 또는 메모리 덤프로 인해) 변경 사항을 취소 할 수없고 분기간에 전환 할 수도없는 경우 (Git은 충분한 권한이 없다고 말합니다) 에서 Windows환경 show all hidden files and folders폴더 옵션에서. GIT 디렉토리 (로 시작해야 함)로 이동 .git하여 "index.lock"파일을 삭제 하십시오. 그러면 Git은 당신이하고 싶은 일을 할 수 있도록해야합니다.


0

나는 결국 일부를 제거하기 위해 git stasha git stash clean를 수행했습니다 . .git / 또는 ~ / .git 항목에서 자동 cr / lf 구성을 보지 못했습니다.


0

제 경우에는 디렉토리와 관련된 변경 사항을 삭제할 수 없습니다. 예를 들어 git diff를 실행하면 다음과 같이 표시됩니다. -Subproject commit fdcccccccccccccccccccccccccccccccccccccc +Subproject commit f1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

그래서 그 디렉토리를 호출하고 거기에서 git 상태를 실행했습니다. HEAD 분리 상태였습니다. 그리고 방금 git checkout master거기에 뛰어 들었 습니다. 그것은 나를 위해 일을 올바르게 설정했습니다. 그러나 이것은 여기에서 요청한 정확한 시나리오에 도움이되지 않습니다.


0

이것은 오래된 질문이지만 여전히 저와 관련이 있습니다. 사무실에서 물어볼 때까지 답을 찾지 못했고 문제가 서브 모듈에 있음을 발견했습니다. 업데이트되고 자신의 저장소에 이러한 변경 사항이 반영되지 않으면 차이점이있는 것으로 표시되며 헤드를 재설정해도 도움이되지 않습니다. 이 경우 다음을 실행하십시오.

git status update

한다 (이 특정 경우에) 수정 일을 도와


0

Windows에서 권한 문제가 발생 icacls containingFolder /reset /t /l /c하여 폴더를 두 번 클릭하여 권한을 되 찾아야했습니다.


0

다음 내용으로 .gitattributes가 있습니다.

* text=auto eol=lf

문제를 극복하려면 .gitattributes줄 끝을 완화하는이 줄을 제거하도록 편집 하십시오. 그런 다음 git reset --hard HEAD파일과 .gitattributes파일을 되돌 렸습니다 .


0

나에게이 문제는 Netlify CMS를 통해 업로드되고 Netlify Large Media 핸들러에서 다르게 제공되는 Git-LFS 이미지를 다운로드하는 조합을 생각해 냈습니다.

내 해결책은 ~/.gitconfig아래처럼 보이도록 내에서 이러한 행을 주석 처리 / 제거한 다음 git status다시 확인하는 것입니다.

# [filter "lfs"]
#   clean = git-lfs clean %f
#   smudge = git-lfs smudge %f
#   required = true

또는 .gitconfig리포지토리 루트에서 를 통해 더 많은 로컬 필터를 추가 하고 어떻게 든 거기에서 lfs에 대한 필터 규칙을 덮어 쓸 수 있습니다.

이것이 동료를 돕기를 바랍니다.


-1

나는 또한 다소 비슷한 문제에 직면했고 다음 단계가 나를 도왔습니다.

git commit -am 'temp commit'
git pull origin master
git reset head~1
git reset head --hard

다른 사람들에게도 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.