programing

Git 재설정 후 남은 스테이징되지 않은 변경 사항 --hard

iphone6s 2023. 7. 11. 21:39
반응형

Git 재설정 후 남은 스테이징되지 않은 변경 사항 --hard

나 뒤에git reset --hard,git status 제다니합에 있는 합니다.Changes not staged for commit:부분.

해봤어요.git reset .,git checkout -- .그리고.git checkout-index -f -a헛되이

그렇다면, 어떻게 하면 단계별 변화를 없앨 수 있을까요?

이것은 Visual Studio 프로젝트 파일에만 해당되는 것 같습니다.이상해요. 이 붙여넣기를 보세요: http://pastebin.com/eFZwPn9Z .이러한 파일의 특별한 점은 .git 특성에서 다음과 같은 특성을 가지고 있다는 것입니다.

*.sln        eol=crlf
*.vcproj     eol=crlf
*.vcxproj*   eol=crlf

또한.autocrlf global 내로에 false 되었습니다..gitconfig그게 관련이 있을까요?

나도 같은 문제를 가지고 있었고 그것은 그것과 관련이 있었습니다..gitattributesfile.이 된 이 . 그러나 문제를 일으킨 파일 형식이 지정되지 않았습니다..gitattributes.

실행만 하면 문제를 해결할 수 있었습니다.

git rm .gitattributes
git add -A
git reset --hard

다음 단계를 사용하여 이 문제를 해결했습니다.

  1. Git의 인덱스에서 모든 파일을 제거합니다.

    git rm --cached -r .
    
  2. Git 인덱스를 다시 작성하여 모든 새 줄 끝을 선택합니다.

    git reset --hard
    

솔루션은 줄 끝을 처리하기 위한 Git 구성에서 설명한 단계의 일부였습니다.

Git는 리포지토리에 없는 파일을 재설정하지 않습니다.따라서 다음과 같은 이점이 있습니다.

$ git add .
$ git reset --hard

이렇게 하면 모든 변경 사항이 준비되어 Git가 해당 파일을 인식하고 재설정할 수 있습니다.

이 작업이 실패하면 변경 내용을 저장하고 삭제할 수 있습니다.

$ git stash
$ git stash drop

Windows용 Git를 사용하는 경우 이 문제가 발생할 수 있습니다.

동일한 문제가 발생하여 저장, 하드 리셋, 청소 또는 모든 변경 사항이 남아 있습니다.문제가 된 것은 git에 의해 제대로 설정되지 않은 x 파일 모드였습니다.이것은 창에 대한 깃과 관련된 "알려진 문제"입니다.로컬 변경 사항은 실제 파일 차이 없이 gitk 및 git 상태를 이전 모드 100755 새 모드 100644로 표시합니다.

이 문제는 파일 모드를 무시하는 것입니다.

git config core.filemode false

자세한 내용은 여기에 있습니다.

좋아요, 제가 문제를 해결했습니다.

그것은 마치..gitattributes포함하는 파일:

*.sln        eol=crlf
*.vcproj     eol=crlf
*.vcxproj*   eol=crlf

프로젝트 파일을 단계별로 표시합니다.저는 그것이 왜 그런지 전혀 모르고, 저는 기트의 방식에 정통한 누군가가 우리에게 멋진 설명을 해주기를 바랍니다.

내 해결책은 이 파일들을 제거하고, 추가하는 것이었습니다.autocrlf = false[core].git/config.

이것은 모든 개발자들이 이전의 구성과 정확히 같은 것이는 모든 개발자가 다음을 수행해야 하기 때문입니다.autocrlf = false더 좋은 방법을 찾고 싶습니다.

편집:

저는 죄를 짓는 대사들에 대해 논평을 했고, 그것들에 대해 언급을 하지 않았고, 그것은 효과가 있었습니다.이게 무슨...난 심지어...!

가능한 원인 #1 - 라인 종료 정규화

이 문제가 발생할 수 있는 한 가지 상황은 문제의 파일이 행 끝에 대한 올바른 구성(1) 없이 리포지토리에 체크인되어 잘못된 행 끝 또는 혼합된 행 끝을 가진 파일이 리포지토리에 있는 경우입니다.확인하려면 다음을 확인합니다.git diff에는 줄 끝 부분의 되지 않을 수 . try 줄 끝 부 기 의 분 변 사 항 만 합 니 시 있 시 수 음 도 다 않 표 을 지 로 표 으 되 시 경 적 본 기 시 ▁in 도 ▁line▁shows ▁try▁( these).git diff | cat -v로 보다^M문자).

그 후, 누군가가 아마도 다음과 같이 추가했을 것입니다..gitattributes 수정을 .core.autocrlf라인 끝단을 정규화하기 위한 설정(2).»를 으로 함.gitattributes또는 글로벌 구성인 Git는 요청된 정규화 종료 라인을 적용하는 로컬 변경사항을 작업 복사본에 적용했습니다.어떤 인지 불어떤행, 이로유도게.git reset --hard는 이러한 라인 정규화 변경을 취소하지 않습니다.

해결책

로컬 라인 끝이 재설정되는 해결 방법으로는 문제가 해결되지 않습니다.Git에서 파일을 "확인"할 때마다 정규화를 다시 적용하여 동일한 문제가 발생합니다.

줄하여 원하는 하도록 하는 입니다..gitattributes이러한 변경사항을 커밋합니다. git 필터 분기를 사용하여 줄 을 수정하려고 하지만 운이 없습니다.를 참조하십시오.

파일에 대한 변경 내용을 수동으로 되돌리려면 가장 쉬운 해결 방법은 수정된 파일을 지우고 이를 복원하도록 git에 지시하는 것입니다. 이 솔루션은 일관되게 100% 작동하지 않습니다(경고: 수정된 파일에 줄 바꿈 이외의 변경 내용이 있는 경우 이를 실행하지 마십시오!!).):

    git status --porcelain | grep "^ M" | cut -c4- | xargs rm
    git checkout -- .

특정 시점에 저장소의 줄 끝을 정규화하지 않으면 이 문제가 계속 발생합니다.

가능한 원인 #2 - 대/소문자 구분 안 함

두 번째 가능한 원인은 Windows 또는 Mac OS/X에서 대/소문자를 구분하지 않는 것입니다.예를 들어 저장소에 다음과 같은 경로가 있다고 가정합니다.

/foo/bar

을 Linux라는 파일에 커밋합니다./foo/Bar(빌드 도구 또는 해당 디렉터리를 만든 다른 도구로 인해 발생함) 를 누르고 를 누릅니다.리눅스에서 이 디렉터리는 실제로 두 개의 별도 디렉터리입니다.

/foo/bar/fileA
/foo/Bar/fileA

에서 이 Mac에서 수정될 수 있습니다.fileA재설정할할 수 . 재설정할 때마다 Windows 체크아웃이 실행되기 때문입니다./foo/bar/fileA는 대소문자를하지 않으므로 Windows(으)의 을 덮어씁니다.fileA와 함께/foo/Bar/fileA결과적으로 "수정"됩니다.

또 다른 경우는 레포에 존재하는 개별 파일일 수 있으며, 이는 대소문자를 구분하지 않는 파일 시스템에서 체크아웃할 때 중복될 수 있습니다.예:

/foo/bar/fileA
/foo/bar/filea

이러한 문제를 일으킬 수 있는 다른 유사한 상황이 있을 수 있습니다.

git on continent 파일 시스템은 이 상황을 감지하고 유용한 경고 메시지를 표시해야 하지만 현재는 표시하지 않습니다(이것은 미래에 변경될 수 있습니다. git.git 메일링 목록에서 이 토론 및 관련 제안 패치를 참조하십시오).

해결책

해결책은 Git 인덱스에 있는 파일의 대소문자와 Windows 파일 시스템의 대소문자를 정렬하는 것입니다.이것은 사물의 실제 상태를 보여주는 리눅스나 매우 유용한 오픈 소스 유틸리티 Git-Unite를 사용하는 윈도우즈에서 수행할 수 있습니다.Git-Unite는 필요한 사례 변경 사항을 Git 인덱스에 적용하여 repo에 커밋할 수 있습니다.

사용하는 이 Windows를 사용하지 를 사용했을 이 가장 ..gitattributes에 대한 및 기본 하는 방법은 다음과 같습니다.core.autocrlf은 어느것이것입니다.false 참조

(2) http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/

다른 응답이 작동하지 않는 경우 파일을 추가한 다음 재설정합니다.

$ git add -A
$ git reset --hard

저의 경우, Git가 추적하는 빈 파일이 많이 있을 때 도움이 되었습니다.

이에 대한 또 다른 원인은 대소문자를 구분하지 않는 파일 시스템일 수 있습니다.이름이 대소문자만 다른 동일한 수준의 폴더가 여러 개 있는 경우 이 문제가 발생합니다.웹 인터페이스(예: GitHub 또는 VSTS)를 사용하여 소스 저장소를 탐색하여 확인합니다.

자세한 내용은 https://stackoverflow.com/a/2016426/67824 에서 확인하시기 바랍니다.

변경 내용을 저장한 후 다음과 같이 저장할 수 있습니다.

git stash
git stash drop

새로 고침 명령 실행:

# Remove all untracked files and directories. (`-f` is `force`, `-d` is `remove directories`)

git clean -fd

이 방법들 중 어느 것도 저에게 효과가 없었습니다. 유일한 해결책은 전체 레포를 핵으로 처리하고 다시 복제하는 것이었습니다.여기에는 저장, 재설정, 추가, 재설정, clrf 설정, 대소문자 구분 등이 포함됩니다.한숨..

를 확인해 ..gitattributes.

저 같은 경우에는.*.js text eol=lf and option in it and git ㅠㅠcore.autocrlf이었다true.

이 내 의 끝을 . git이 파 줄 끝 자 변 으 수 로 환 하 못 됩 니 다 하 이 게 르 상 하 게 에 황 일 는 지 하 정 고 을 동 ▁g ▁it 다 됩 니 ▁g ▁even ▁when ▁end ▁situation ▁it ▁prevent ▁brings ▁the▁to ▁line 게 ings ▁and ▁megit reset --hard HEAD아무것도 하지 않았습니다.

나는 논평으로 그것을 고칩니다.*.js text eol=lf내 안에서.gitattributes그 후에 코멘트를 달았습니다.

마법이 걸린 것 같군요

Windows용 Git에는 체크아웃 시 줄 끝을 임의로 잘못 쓰는 문제가 있다고 생각합니다. 유일한 해결 방법은 다른 지점을 체크아웃하고 Git이 변경 사항을 무시하도록 강제하는 것입니다.그런 다음 실제로 작업할 지점을 확인합니다.

git checkout master -f
git checkout <your branch>

이렇게 하면 의도적으로 변경한 내용이 삭제되므로 체크아웃 후 바로 이 문제가 발생한 경우에만 변경하십시오.

편집: 사실 처음에는 운이 좋았을지도 모릅니다.알고 보니 나뭇가지를 바꾼 후에 또 물렸어요.분기를 변경한 후 파일 git가 수정된 것으로 보고되었습니다. (분명히 git가 파일 끝에 CRLF 줄을 제대로 적용하지 않았기 때문입니다.)

Windows용 최신 Git로 업데이트했으며 문제가 해결되기를 바랍니다.

저도 같은 문제가 있었습니다.가 ㅠㅠgit reset --hard HEAD 매번 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠgit status일부 파일이 수정된 것으로 확인되었습니다.

제 해결책은 비교적 간단했습니다.방금 IDE(여기는 Xcode)를 닫고 명령줄(여기는 Mac OS의 터미널)을 닫고 다시 시도했더니 작동했습니다.

하지만 저는 무엇이 문제를 일으켰는지 결코 찾을 수 없었습니다.

나는 또한 관련된 유사한 문제에 부딪혔습니다..gitattributes하지만 제 경우에는 깃허브의 LFS가 관련되어 있습니다.이것이 정확히 OP의 시나리오는 아니지만, 저는 그것이 무엇인지 설명할 수 있는 기회를 제공한다고 생각합니다..gitattributes파일이 수행되며, 이로 인해 "단계별" 차이의 형태로 단계별로 변경될 수 있는 이유가 무엇입니까?

제 경우, 처음부터 파일이 이미 저장소에 있었습니다.저는 새로운 에▁a다▁new를 했습니다.git-lfs track약간 너무 광범위한 패턴을 사용하는 규칙, 그리고 결국 이 고대 파일과 일치하게 됩니다.하지 않았다는 것을 , 되지 않은 가 해결되지 . 라는 이름의 이 있습니다. 파일을 변경하지 않았다는 것을 알고 있습니다. 하지만 지금은 단계적으로 변경되지 않은 상태여서 해당 파일의 체크아웃이나 하드 재설정으로 해결할 수 없습니다. 왜 그럴까요?

GitHub LFS 확장같활작동합다니용여하크후를은의 후크를 합니다.git 수 ..gitattributes일파의 . 일반적으로, 항목:.gitattributes일치하는 파일을 처리하는 방법을 지정합니다.OP의 경우는 줄 끝을 정규화하는 것과 관련이 있었고, 저의 경우는 LFS가 파일 저장소를 처리하도록 할 것인지 여부였습니다.경우든 은 어경우든, 실파은일입니다.git를 할 때 .git diff파일을 검사할 때 표시되는 파일과 일치하지 않습니다.라서따파처방경변식우경할을 통해 .gitattributes이와 일치하는 패턴은 파일에 변경 사항이 없는 경우에도 상태 보고서에 단계별 변경 사항으로 표시됩니다.

해도,그 나의 모든것, 그에대대 "답은의"의 라면, 문질한 "약화변"입니다..gitattributes파일은 당신이 하고 싶었던 것입니다. 당신은 정말로 변경 사항을 추가하고 넘어가야 합니다.그렇지 않을 경우, 다음을 수행합니다..gitattributes당신이 하고 싶은 일을 더 잘 표현하기 위해서요.

레퍼런스

  1. GitHub LFS 사양 - 연결 방법에 대한 훌륭한 설명clean그리고.smudge 사용자의 합니다.git해시가 있는 단순 텍스트 파일이 있는 개체입니다.

  2. git 속성 설명서 - 사용자 정의 방법에 대한 모든 세부 정보git문서를 처리합니다.

단순히 복구를 시도합니다.

그것이 바로 git이 말하는 것이고 그것은 작동합니다.

겉으로만 확신하지만 비슷한 문제입니다.어쨌든 누군가에게 도움이 될 수 있습니다. 제가 한 일(FWIW, SourceTree): 커밋되지 않은 파일을 숨긴 다음 하드 리셋을 했습니다.

다른 답변에서 지적했듯이, 문제는 라인 엔드 자동 수정 때문입니다.*.svg 파일에서 이 문제가 발생했습니다.프로젝트에서 아이콘으로 svg 파일을 사용했습니다.

이 문제를 해결하기 위해 아래 행을 .git 속성에 추가하여 svg 파일이 텍스트가 아닌 이진 파일로 처리되어야 한다는 것을 git에 알렸습니다.

*.tg 이진수

비슷한 상황에서.여러 해 동안 많은 프로그래머들이 고통을 겪었기 때문에 줄 끝의 다른 인코딩을 채울 수 있었습니다.본질이 아님)을 하나의 파일로.얼마 전에 .git 특성을 거부했습니다.repo left에 대한 설정autorclf = true그리고.safecrlf = warn.

마지막 문제는 아카이브에서 다른 줄 끝으로 동기화할 때 발생했습니다.아카이브에서 복사한 후 Git 상태에서 노트와 함께 많은 파일이 변경됩니다.

The line will have its original line endings in your working directory. warning: LF will be replaced by CRLF in ...

Git에서 작업 트리 라인 종료를 정상화하는 방법의 팁은 도움이 되었습니다.

git add -u

제가 만난 또 다른 가능성은 저장소의 패키지 중 하나가 분리된 HEAD로 끝났다는 것입니다.여기서 아무 대답도 도움이 되지 않는 경우 다음과 같은 Git 상태 메시지가 나타날 수 있습니다.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   path/to/package (new commits)

path/to/packagegit status다음과 같은 결과를 얻을 수 있습니다.

HEAD detached at 7515f05

명령을 합니다. 서 "" " " " " " " " " 라는 문제를 해결합니다.master로컬 지점으로 대체해야 합니다.

git checkout master

그러면 로컬 지점이 원격 지점 뒤에 있는 커밋의 양이 될 것이라는 메시지가 표시됩니다. git pull그리고 당신은 숲에서 나와야 합니다!

Enviro: Visual Studio 2019 + git + Azure DevOps.

행동

하드 리셋을 시도한 후 이 상황에 부딪혔지만, 내 것은 라인 종료로 인한 것이 아니었습니다.

여러 명령을 실행할 때 git이 중단되었습니다. 즉, 명령 프롬프트로 다시 돌아가지 않습니다.지정된 명령의 파일이 처리된 것으로 표시되지만 명령의 "단계"를 모두 완료하지는 않습니다.

git clone, 예:

enter image description here

해결책

새 개인 액세스 토큰 PAT 만들기

기존 PAT와 관련된 보안/자격 증명 문제였지만 실패했다는 로깅을 찾을 수 없었습니다.

웬일인지 그래.

git add .

효과가 없었지만,

$ git add -A

운동했습니다!

언급URL : https://stackoverflow.com/questions/11383094/unstaged-changes-left-after-git-reset-hard

반응형