source

Git의 변경 내용을 삭제할 수 없는 것 같습니다.

manycodes 2023. 11. 2. 21:54
반응형

Git의 변경 내용을 삭제할 수 없는 것 같습니다.

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

# 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 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

이것은 한동안 나를 괴롭혔고, 내가 확인할 거의 모든 레포에는 내가 버릴 수 없는 변경 사항이 있었습니다.간단히 말해서, 위의 모든 것을 시도해 보았지만, 아무 것도 효과가 없었습니다.이것이 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

여기 제 경험이 있습니다. 다음 변수를 설정합니다..git/config:

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

그다음에 달리다$ git checkout HEAD ., 효과는 있습니다만$ git checkout -- .아니, 이상해요!

* git 버전 1.9.3

변경사항git diff파일에 표시?윈도우에서 라인 엔딩으로 인해 이와 같은 문제가 발생하는 것을 본 적이와 같은 문제가 발생합니다.그런 경우에는 어떤 설정을 사용하는지 확인합니다.git config core.autocrlf그리고.git config core.safecrlf. 여기에 이러한 설정에 대한 설명서가 있습니다.

만약 당신이 사용하고 있다면, 저는git svn전복과의 통합을 위해, 그리고 나서 반드시autocrlf꺼져 있습니다.제가 보기에 이 구성은 단지 고장난 것이고 대부분의 도구가 파일이 변경되었다고 생각하게 합니다.checkout모든 변경사항을 되돌립니다.

사용자가 수행하는 작업에 문제가 있는 경우git checkout,그리고 나서.git status파일이 여전히 수정된 상태임을 보여 줍니다.git diff는 파일의 모든 줄에서 파일이 수정된 것을 보여줍니다. 그러면 이 문제가 발생합니다.

핵심.자폐.

true이면 파일 시스템에서 읽을 때 텍스트 파일의 줄 끝에 있는 CRLF를 LF로 git 변환하고 파일 시스템에 쓸 때는 반대로 변환합니다.변수를 입력으로 설정할 수 있습니다. 이 경우 변환은 파일 시스템에서 읽는 동안에만 수행되지만 파일은 줄 끝에 LF로 작성됩니다.현재, "text"를 고려할 경로(즉, autoclf mechanism의 적용을 받는)는 순수하게 내용에 기초하여 결정됩니다.

core.safecrlf

true이면 CRLF를 core에서 제어하는 대로 변환하는지 git 체크합니다.autoclf는 가역적입니다.Git는 명령어가 작업 트리의 파일을 직접 또는 간접적으로 수정하는지 확인합니다.예를 들어, 파일을 커밋한 후 동일한 파일을 체크아웃하면 작업 트리의 원본 파일이 생성됩니다.Core의 현재 설정이 그렇지 않은 경우.autoclf, git은 파일을 거부할 것입니다.변수를 "warn"(경고)로 설정할 수 있습니다. 이 경우 git는 비가역적 변환에 대해서만 경고하고 작업은 계속합니다. ...

제 생각에 당신은 통과해야 할 것 같습니다.-f

맨페이지()에서)man git-checkout, GIT-체크아웃(1):

-f, --force
인덱스 또는 작업 트리가 HEAD와 다를 경우에도 진행합니다.
이것은 지역의 변화를 버리기 위해 사용됩니다.

예를 들어, 현재 분기에서 변경 내용을 삭제하고 다른 분기로 전환합니다.

git checkout -f master

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

git diff index.htm

그리고 파일 모드 변경 내용을 보여줍니다.그러나 -f 옵션을 사용하더라도 체크아웃을 사용하여 이를 되돌릴 수는 없습니다.둘 중 하나를 사용합니다.

git config core.파일 모드 false

또는 텍스트 편집기의 git.config를 다음을 추가하여 변경합니다.

[핵심]

filemode = false

이렇게 하고 나면 사용할 수 있습니다.

git reset HEAD index.htm

파일이 사라져야 합니다.

(나는 어떻게 git ignore mode changes (chmod)변경할 수 있는지에 대한 답변에서 이 모든 것을 얻었습니다.업데이트 파일 권한 전용 인기트)

제 문제는 여기서 비슷하고 방금 git가 파일 권한의 변경 사항을 추적하고 있다는 것을 알게 되었습니다.브랜치를 폐기하고 재설정하려고 했지만 파일이 그대로 있습니다. 실행합니다.git config --get --local core.filemode, 참이면 파일 권한 추적을 해제하려면 false로 설정해야 합니다.입니다.git config --local core.fileMode false해결해야 합니다.여기서 더 읽어보실 수 있습니다.

OSX와 Windows 중 어느 것을 사용하십니까?그렇다면 문제는 아마 같은 이름의 두 개의 파일을 다른 경우에 가지고 있는 것일 것입니다.index.htm 및 Index.htm

윈도우와 OSX는 기본적으로 대소문자를 구분하지 않는 파일 시스템을 사용하며, 이 파일 시스템은 대소문자를 구분하지 않는 깃과 충돌합니다.

저는 이 문제가 있었고 위의 모든 것을 시도해 보았지만 아무 것도 작동하지 않았습니다.

내게 효과가 있었던 것은 파일이 들어있는 디렉토리를 삭제하는 것이었고, 그 다음에는git status이제 해당 dir의 모든 파일이 삭제된 것으로 표시되었는지 확인했습니다.그 다음엔 그냥 했습니다.git checkout -f모든 게 정상으로 돌아갔죠

저도 같은 문제가 있었는데, 위의 댓글에서 아무 것도 통하지 않았습니다.파일 시스템은 대소문자를 구분하지 않으며(osx 기본값은 동일하지만 윈도우는 동일하게 동작함), 파일이 같은 디렉토리에 대문자와 소문자로 모두 존재하며 다른 내용을 가진 것으로 나타났습니다.제 컴퓨터에서 두 이름이 같은 파일을 가리키기 때문에 git 상태는 제가 무엇을 하든 항상 수정되었습니다.문제 해결 방법:

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

  • 로컬 버전 전체를 완전히 삭제합니다.

  • 처음부터 복제를 하다

저는 일을 하고 있었습니다.libGDX에 투사하다Android Studio제가 한 모든 변경 사항을 폐기하고 싶었지만 아무 것도 효과가 없었습니다. 제가 생각해낸 해결책은 모든 변경 사항을 새로운 지점에 적용하는 것이었습니다.

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

그런 다음 삭제할 수 있습니다.TRASH당신이 원한다면 가지세요.

나는 다음과 같은 내용을 가진 .git 속성을 가지고 있었습니다.

* text=auto eol=lf

문제를 해결하려면 편집합니다..gitattributes선 끝을 이완시키는 이 선을 제거합니다.그리고나서git reset --hard HEAD파일을 되돌리고..gitattributes파일.

저는 결국.git stash뒤에 a.git stash clear일부를 제거하기 위해서요.git/ 또는 ~/.git 항목에서 자동 cr/lf 구성을 찾을 수 없습니다.

존재하지 않거나 변경된 파일을 폐기할 수 없는 유사한 문제가 있었습니다.회사에서 Visual Studio를 사용하는데 앱이 실행되는 동안 분기를 전환할 때 이러한 현상이 발생한다는 것을 알게 되었습니다.

git checkout폐기하려 해도 도움이 되지 않았습니다그것은 효과가 없을 것이고, 아니면 그냥 저에게 허락이 없다는 것을 말해줄 것입니다.

효과적인 솔루션:

  1. 안전 모드로 들어갑니다.
  2. 파일 삭제

다시 시작하는 것은 힘든 일이지만 이것은 100가지를 시도하는 것보다 더 빨리 효과가 있었습니다.

쉬운 해결책이 있습니다.이러한 경우(보통 예기치 않은 창 종료 또는 메모리 덤프로 인해) 변경 사항을 삭제할 수 없고 분기 간 전환조차 할 수 없는 경우(Git에서 사용자에게 권한이 충분하지 않다고 표시함),Windows환경show all hidden files and folders폴더 옵션에서 선택할 수 있습니다.GIT 디렉토리로 이동합니다(처음부터 시작).).git) 및 삭제합니다."index.lock"파일. 그럼 깃은 당신이 하고 싶은 대로 하게 해줘야겠네요.

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

그래서 그 전화번호부에 전화를 걸어 상태를 확인했습니다.머리가 분리된 상태였습니다.그리고는 그냥 달려갔습니다.git checkout master저 안에그것이 저에게 잘 맞았습니다.하지만 이것은 여기서 질문한 정확한 시나리오에 도움이 되지 않습니다.

이것은 오래된 질문이지만 여전히 저와 관련이 있었습니다.저는 사무실 주변에 물어보기 전까지 답을 찾지 못했고, 그 문제가 서브모듈에 있다는 것을 알게 되었습니다.업데이트된 저장소가 이러한 변경 사항을 반영하지 않을 때 차이점이 있는 것으로 표시되므로 헤드를 재설정하는 것은 도움이 되지 않습니다.이 경우 다음을 실행합니다.

git status update

그것은 일을 해결하는 데 도움이 될 입니다 (이 경우에는).)

Windows에서 권한 문제가 발생하여 다음 작업을 수행해야 했습니다.icacls containingFolder /reset /t /l /c그런 다음 폴더를 두 번 클릭하여 내 권한을 돌려받습니다.

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

제 해결책은 이러한 행을 제 행에서 제외/제거하는 것이었습니다.~/.gitconfig아래와 같이 보이게 한 다음에 확인합니다.git status다시.

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

아니면 다음을 통해 더 많은 로컬 필터를 추가할 수 있습니다..gitconfigrepo root에서 lfs에 대한 필터 규칙을 덮어씁니다.

이것이 친구에게 도움이 되기를 바랍니다.

이러한 답변 중 많은 부분이 많은 문제 중 하나에 대한 문제를 해결합니다.따라서 문제가 된 것을 찾을 때까지 몇 가지 시도를 해봐야 할 수도 있습니다.그래서 믹스에 저만의 경험을 더하겠습니다.

저의 경우, 문제는 제가 세계적인~/.gitattributes나의 파일에~/.gitconfig. 그 파일을 최종적으로 검사했을 때, 문제가 있는 확장자를 찾아 수동으로 수정할 수 있었습니다.

특히 제가 다루던 문제적인 레포에 대해서는*.batneed be-text eol=crlf대신에text eol=crlf.

같은 문제를 가지고 있고 나는core.autocrlf=false구성.

문제는 거기에 제가 추가했다는 겁니다.* text eol=lf로..gitattibutes파일, 그리고 모든 기존 파일에서 CRLF를 LF로 변환하지 않고 repo에 커밋했습니다.따라서 이 파일들은 다른 repo의 새로운 클론에서도 수정된 것으로 표시됩니다.그것은 조금 이상합니다.git statusgit 작업 디렉토리와 스테이지 영역 모두에서 동일한 CRLF를 갖더라도 파일이 수정되었다고 보고합니다.수정된 내용은 파일이 추가되고 커밋되면 현재 구성에 따라 비어 있지 않은 변경 사항이 있을 것으로 보입니다.

그래서 저는git add모든 파일과 커밋(커밋에 CRLF->LF의 변환이 포함되어 있음을 확인)하여 수정된 파일 보고서를 더 이상 받지 못했습니다.

가끔 나는 nWindows파일이 다른 프로그램에서 사용되고 있어서 아무것도 할 수 없습니다.먼저 Visual Studio를 닫거나 파일을 실행하거나 쓰기 위해 열려 있는 모든 프로그램을 닫아야 합니다.

내 경우에는 내 파일 확장자가.txt, 그래서 덧붙였어요.

*.txt       eol=crlf

.git 속성 파일에서 문제가 해결되었습니다.

완전히 새로 체크아웃을 했을 때도 문제가 있었습니다.git status는 일반 텍스트 파일이 아닌 파일이라도 LF/CRLF 스왑으로 인한 파일의 변경 사항을 보여줍니다.

해결하기 위해 나는 이 파일들을 .git 속성 파일에 이진으로 표시했습니다.

<path_to_problematic_files> binary

저도 비슷한 문제에 직면했고 다음 단계가 도움이 되었습니다.

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

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

언급URL : https://stackoverflow.com/questions/1575682/cant-seem-to-discard-changes-in-git

반응형