자식 상태는 수정 사항을 보여줍니다, 자식 체크 아웃 — <파일>은 제거하지 않습니다


222

작업 사본의 모든 변경 사항을 제거하고 싶습니다.
Running git status은 수정 된 파일을 보여줍니다.
내가 수정 한 것을 제거하는 것 같지 않습니다.
예 :

rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ 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:   Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
#       modified:   Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
#       modified:   Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
#       modified:   Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")

rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git checkout -- Rhino.Etl.Core/Enumerables/CachingEnumerable.cs

rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ 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:   Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
#       modified:   Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
#       modified:   Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
#       modified:   Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")

rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git checkout `git ls-files -m`

rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ 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:   Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
#       modified:   Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
#       modified:   Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
#       modified:   Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")

rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git reset --hard HEAD
HEAD is now at 6c857e7 boo libraries updated to 2.0.9.2 and rhino.dsl.dll updated.

rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ 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:   Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
#       modified:   Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
#       modified:   Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
#       modified:   Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")

6
왜 git reset --hard여기에서 작동하지 않았는지 확실 하지 않습니다. 참고 : git checkout -- `git ls-files -m`파일을 취소해야합니다 ( --)
— VonC

2
파일을 삭제하고 사용 checkout -- <file>하면 작동합니다. 일부 상황에서는 CRLF 불일치가있는 경우 변경 감지가 약간 까다
— 롭습니다.


1
@ BuZZ-dEE-복제본이며 이전 버전이므로 우선합니다. 그러나 당신이 연결하는 질문은 본질적으로 동일하지만 아래에서 받아 들인 대답은 거기에있는 대답보다 훨씬 유익하며 내 문제를 해결했습니다.
— rbellamy

해결책이 아니라 지루한 사례에 대한 스위스 칼 : git update-index --assume-unchaged파일의 뭉친 상태를 강제로 변경합니다 (변경된 파일조차도)
— pdem

답변:


126

이 동작을 일으킬 수있는 여러 가지 문제가 있습니다.

줄 끝 정규화

나도 이런 종류의 문제가 있었다. git은 crlf를 lf로 자동 변환합니다. 이것은 일반적으로 단일 파일에서 줄 끝이 혼합되어 발생합니다. 파일은 인덱스에서 정규화되지만 git은 다시 비정규 화하여 작업 트리의 파일과 비교하기 위해 다시 정규화하면 결과가 다릅니다.

그러나이 문제를 해결 하려면 core.autocrlf 를 비활성화하고 모든 줄 끝을 lf로 변경 한 다음 다시 활성화해야합니다. 또는 다음을 수행하여 완전히 비활성화 할 수 있습니다.

git config --global core.autocrlf false

core.autocrlf 대신 .gitattribute파일 사용을 고려할 수도 있습니다. 이렇게하면 리포지토리를 사용하는 모든 사람이 동일한 정규화 규칙을 사용하여 혼합 된 줄 끝이 리포지토리에 들어 가지 않도록 할 수 있습니다.

되돌릴 수없는 정규화가 수행 될 때 git이 경고하도록하려면 core.safecrlf 를 경고하도록 설정 하십시오 .

자식 맨 페이지 는 다음과 같이 말합니다.

CRLF 변환은 데이터를 약간 손상시킬 수 있습니다. autocrlf = true는 커밋 중에 CRLF를 LF로 변환하고 체크 아웃 중에 LF를 CRLF로 변환합니다. 커밋 전에 LF와 CRLF가 혼합 된 파일은 git에서 다시 만들 수 없습니다. 텍스트 파일의 경우 이것이 올바른 일입니다. 저장소에 LF 줄 끝만 있도록 줄 끝을 수정합니다. 그러나 실수로 텍스트로 분류 된 이진 파일의 경우 변환시 데이터가 손상 될 수 있습니다.

대소 문자를 구분하지 않는 파일 시스템

대소 문자를 구분하지 않는 파일 시스템에서 다른 케이싱을 가진 동일한 파일 이름이 저장소에 있으면 git은 둘 다 체크 아웃하려고하지만 파일 시스템에서는 하나만 종료됩니다. git이 두 번째 것을 비교하려고하면 잘못된 파일과 비교합니다.

해결책은 대소 문자를 구분하지 않는 파일 시스템으로 전환하는 것이지만 대부분의 경우 다른 파일 시스템의 파일 중 하나를 바꾸거나 이름을 바꾸고 커밋 할 수 없습니다.


8
좋아 ... 그래서 ... 지금 자식 상태는 변경 사항을 표시하지 않습니다. autocrlf 설정을 읽었으며 제대로 설정하지 못하는 것 같습니다.
— rbellamy

1
잘 잡아! +1. 또 다른 주장은 그것을 false ( stackoverflow.com/questions/1249932/… )로 설정하는 것 입니다.
— VonC

이것은 무엇을 의미 하는가 : "커밋 전에 LF와 CRLF가 혼합 된 파일은 git에 의해 재생성 될 수 없다" 이것은 git이 core.autocrlf 설정에 따라 항상 줄 끝을 정규화하기 때문입니까?
— rbellamy

1
대소 문자 구분 문제에 대한보다 확실한 해결책은 repo에 대 / 소문자 만 다른 이름을 가진 여러 개의 폴더를 두지 않는 것 입니다.
— 하드 슈나이더

3
대소 문자 만 다른 파일 이름을 찾으려면 다음을 실행하십시오 git ls-tree -r --name-only HEAD | tr A-Z a-z | sort | uniq -d. 이러한 파일의 대문자와 소문자 이름을 모두 나열하려면 다음을 실행하십시오.git ls-tree -r --name-only HEAD | fgrep -i -f <(git ls-tree -r --name-only HEAD | tr A-Z a-z | sort | uniq -d) | sort -i
— Diomidis Spinellis

220

나는 Windows 에서이 문제를 겪고 있었지만 사용의 결과를 조사 할 config --global core.autocrlf false준비가되어 있지 않았으며 또한 내 개인의 다른 개인 지점과 케이크를 버리고 신선한 클론으로 시작할 준비가되지 않았습니다. 난 그냥 뭔가를해야합니다. 지금.

이것은 git이 작업 디렉토리를 완전히 다시 작성하게한다는 아이디어로 저에게 효과적이었습니다.

git rm --cached -r .
git reset --hard

( 원래 질문에 대한 의견에서 제안 된 것처럼 실행 git reset --hard이 충분하지 않았거나 rm파일에 대한 평범하지 않았습니다. reset)


8
변경 후의 또 다른 성공 core.autocrlf은 아무런 영향을 미치지 않았습니다.
— Daniel Buckmaster

8
Windows에서도이 문제가 발생했습니다 core.autocrlf false. 이 답변은 다른 것이 없을 때 효과적이었습니다.
— kenchilada 2016 년

9
이 질문과 다른 질문에서 여러 제안을 시도했습니다. 이것은 나를 위해 일한 유일한 수정입니다. 속성 파일이 없었으며 이미 core.autocrlf로 false로 시작했습니다.
— BrotherOdin

4
이것은 나를 위해 작동하지 않았습니다. 그래서 나는 어쨌든 나에게 쓸모가 없기 때문에 이러한 변경 사항을 커밋하기 위해 새로운 브랜치를 만들어 더 못생긴 방식으로했습니다. [자바] 자식 체크 아웃 -b A-지사에 커밋 - 나쁜 CRLF-파일을 [/ 자바] [자바] 자식이 -am 커밋 "나쁜 CRLF 파일을 커밋"[/ 자바]
— 흐드 파리 드

3
때로는 이런 문제로 인해 SVN이 그리워집니다.
— Mike Godin

104

텍스트 옵션 중 어느 것도 나를 위해 작동하지 않았기 때문에 사람들에게 도움이되는 또 다른 솔루션 :

  1. 의 내용을 .gitattributes한 줄로 바꾸십시오 : * binary. 이것은 git에게 모든 파일을 아무것도 할 수없는 이진 파일로 취급하도록 지시합니다.
  2. 문제가있는 파일에 대한 메시지가 사라 졌는지 확인하십시오. 그렇지 않은 경우 git checkout -- <files>리포지토리 버전으로 복원 할 수 없습니다
  3. git checkout -- .gitattributes.gitattributes파일을 초기 상태 로 복원
  4. 파일이 여전히 변경된 것으로 표시되지 않았는지 확인하십시오.

1
지난 몇 시간 동안 파일을 되돌 리거나 당기거나 숨길 수없는 문제에 봉착했습니다. 이것은 나를위한 해결책이었다! 감사! (Git 1.8.3.1)
— NuSkooler

3
나는 이것으로 마침내 성공하기 전에 많은 것을 시도했습니다. 감사합니다!
— ghenghy

1
이것은 어떻게 작동합니까? .gitattributes원래대로 되 돌리면 같은 문제가 다시 발생 한다고 생각 하지만 아쉽게도 내 문제가 해결되었습니다. 다른 제안은 제 경우에는 효과가 없었습니다.
— jdk1.0

1
@ jdk1.0 내 이해 / 추측은 두 가지 다른 비교 방법이 관련되어 있다는 것입니다. 어딘가에 다른 줄이있을 때 오류가 발생하고 git은 때때로 그것을 무시합니다. 당신이 물어 git status보면, 그것들은 다른 파일임을 알게됩니다. 당신이 요청할 때 git checkout, 그들은 같은 내용을 가지고 있음을 발견합니다. 이 솔루션은 일시적으로 git에게 줄 끝의 영리함을 무시하고 로컬 복사본이 바이트 단위와 동일해야합니다 HEAD. 일단 해결되면 새로운 오류를 추가하지 않기 때문에 영리한 재개를 허용해도 괜찮습니다.
— zebediah49

3
이 문제를 해결하는 데 몇 시간을 보냈 으며이 솔루션은 마침내 나를 위해 일했습니다!
— Maryam

71

미래에이 문제가있는 사람들을 위해 : 파일 모드 변경이 동일한 증상을 가질 수도 있습니다. git config core.filemode false그것을 고칠 것입니다.


3
이 작업을 수행 한 후 다음 작업을 수행해야합니다.git checkout .
— Marty Neal

2
다시 체크 아웃하지 않아도 나를 위해 일했습니다
— phillee

3
나중에 참조 할 수 있습니다 : 이것이 필요한 수정인지 (다른 답변의 다른 수정 사항이 아닌지) 알고 싶다면 다음 git diff과 같이 모드가 변경된 파일을 표시하십시오 old mode 100755 / new mode 100644.
— pgr

이것은 아무것도 할 수 없었을 때 나를 위해 그것을 고쳤습니다. 저는 사람들이 인터넷에서 git cheatsheets와 "간단한 가이드"를 만들어야한다고 생각하지 않습니다. Git은 실제로 집어 들고 사용하는 것이 아니라 사용하기 전에 헌신적이고 공식적인 교육과 연습을해야한다고 생각합니다.

고마워요, 눈물을 많이 절약했습니다!
— Lukasz

33

이것은 나를 미치게 만들었습니다. 특히 온라인에서 찾은 솔루션 없이이 문제를 해결할 수 없었습니다. 내가 해결 한 방법은 다음과 같습니다. 이것은 동료의 작품이므로 여기에서 크레딧을 얻을 수 없습니다 :)

문제의 근원 : git의 초기 설치는 Windows에서 자동 라인 변환이 없었습니다. 이로 인해 GLFW에 대한 초기 커밋이 올바른 줄 끝없이 이루어졌습니다.

참고 : 이것은 로컬 솔루션 일뿐입니다. 레포를 복제하는 다음 사람은 여전히이 문제로 고착 될 것입니다. 영구적 인 해결책은 https://help.github.com/articles/dealing-with-line-endings/#re-normalizing-a-repository 에서 찾을 수 있습니다 .

설정 : Xubuntu 12.04 glfw 프로젝트와 Git 저장소

문제 : glfw 파일을 재설정 할 수 없습니다. 내가 시도한 것에 관계없이 항상 수정 된 것으로 표시됩니다.

해결 :

edit .gitattributes

Comment out the line:    # text=auto

Save the file

restore .gitattributes:   git checkout .gitattributes

주석 처리 된 행의 내용을 언급하면 ​​도움이 될 수 있습니다.
— rbellamy

불행히도, 대부분의 프로젝트에는이 선택적 .gitattribute 파일이 없습니다
— mchiasson

감사합니다. 나는 이것이 왜 필요한지 이해하지 못한다
— diogovk

왜? 기본적으로 이것은 줄 끝에 대한 임시 수정입니다. 참고의 링크를 따라 영구적 인 솔루션을 사용하십시오.
— Richard Lalancette

11

동일한 문제가있는 .bat 파일이 있습니다 (추적되지 않은 파일에서 제거 할 수 없음). git checkout-작동하지 않았 으며이 페이지의 제안 사항도 없습니다. 나를 위해 일한 유일한 것은해야했습니다.

git stash save --keep-index

그런 다음 숨김을 삭제하려면 다음을 수행하십시오.

git stash drop

이것은 나를 위해 일했습니다. (가) 있습니다 --keep-index중요하다.
— user991710

--keep-index가 중요한 이유는 무엇입니까?
— Choylton B. Higginbottom

8

같은 문제가 두 번 발생했습니다! 두 가지 변경 사항을 숨기면 두 번 변경 한 다음 다시 표시하려고했습니다. 변경된 파일이 많으므로 변경 사항을 표시 할 수 없습니다. 그러나 그렇지 않습니다! 그들은 정확히 동일합니다.

이제 위의 모든 솔루션을 성공하지 못했다고 생각합니다. 시도 후

git rm --cached -r .
git reset --hard

이제 저장소의 거의 모든 파일이 수정되었습니다.

파일을 비교할 때 모든 줄을 삭제 한 다음 다시 추가한다고 말합니다.

방해의 종류. 나는 이제 앞으로 숨겨지지 않을 것입니다 ..

유일한 해결책은 새로운 저장소를 복제하고 다시 시작하는 것입니다. (마지막 시간)


6

시도해보십시오

자식 체크 아웃 -f

현재 작업중인 로컬 리포지토리의 모든 변경 내용이 지워 져야합니다.


좋은! 이것은 나를 위해 일했습니다. 비록 완고한 사건 하나를 위해서 나는 먼저 git checkout -f <another recent branch>다음과 같이 나의 지점으로 돌아 가야했다git checkout -f <branch I'm working on>
— 리버스 엔지니어

4

내 repo의 .gitattributes 파일 ( * text=auto및 정의 됨 *.c text) 을 임시로 삭제 하여이 문제를 해결할 수있었습니다 .

git status삭제 후 실행 되었으며 수정 사항이 사라졌습니다. .gitattributes가 다시 설치 된 후에도 반환되지 않았습니다.


필터와 같은 좀 더 복잡한 gitattributes에서도 작동합니다.
— Samizdis

2

일관된 줄 끝을 갖는 것이 좋습니다. 예를 들어, 사소한 것이지만 불필요한 병합을 트리거하지는 않습니다. Visual Studio에서 줄 끝이 혼합 된 파일을 만드는 것을 보았습니다.

또한 bash (linux의 경우)와 같은 일부 프로그램에서는 .sh 파일을 LF로 종료해야합니다.

이런 일이 발생하도록 gitattributes를 사용할 수 있습니다. autcrlf의 값이 무엇이든 상관없이 저장소 레벨에서 작동합니다.

예를 들어 다음과 같이 .gitattributes를 가질 수 있습니다. * text = auto

경우에 따라 파일 유형 / 확장자별로 더 구체적 일 수도 있습니다.

그러면 autocrlf는 Windows 프로그램의 줄 끝을 로컬로 변환 할 수 있습니다.

혼합 C # / C ++ / Java / Ruby / R, Windows / Linux 프로젝트에서 이것은 잘 작동합니다. 지금까지 문제가 없습니다.


2

나도 같은 증상이 있었지만 다른 일로 인해 발생했습니다.

나는 할 수 없었다 :

git checkout app.js //did nothing
git rm app.js //did nothing
rm -rf app.js //did nothing

심지어 git rm --cached app.js삭제 된 것으로 표시되고 추적되지 않은 파일에서 app.js를 볼 수 있습니다. 그러나 다시 시도 rm -rf app.js하고 peform git status해도 여전히 파일을 '비 추적'으로 표시합니다.

우리는 동료와 몇 번의 시도 끝에 Grunt가 원인이라는 것을 알게되었습니다!

은 다음과 같이 Grunt설정하고 있으며, app.js 때문에 다른 JS 파일의 몇에서 생성 된 우리의 js 파일 (이 app.js)와 각 작업 후 꿀꿀 재 작성 다시 app.js 것을 알아 냈다.


2

이 문제는 Linux 시스템에서 저장소에 대한 기고자가 작동하거나 Cygwin 및 파일 권한이있는 창이 변경된 경우에도 발생할 수 있습니다. 힘내는 755와 644 만 알고 있습니다.

이 문제의 예와 확인 방법 :

git diff styleguide/filename

diff --git a/filename b/filename
old mode 100644
new mode 100755

이를 피하려면 다음을 사용하여 git을 올바르게 설정해야합니다

git config --global core.filemode false

2

여기에 많은 해결책이 있으며 내 자신을 생각해 내기 전에 아마도 이들 중 일부를 시도했을 것입니다. 어쨌든 여기에 하나 더 있습니다 ...

우리의 문제는 최종 기한을 시행하지 않았고 저장소에는 DOS / Unix가 혼합되어 있다는 것입니다. 더 나쁜 것은 여전히 ​​그것이 실제로이 입장에서 오픈 소스 레포지토리였으며 우리가 분기 한 것입니다. OS 리포지토리의 기본 소유권을 가진 사람들이 모든 최종 기한을 Unix로 변경하기로 결정했으며 .gitattributes, 줄 끝을 적용하기위한 커밋이 포함되었습니다 .

불행히도 이것은 DOS-2-Unix 이전의 코드 병합이 완료되면 파일이 영원히 변경된 것으로 표시되어 되돌릴 수없는 여기에 설명 된 것과 같은 문제를 일으키는 것으로 보입니다.

이것을 연구하는 동안 나는 https://help.github.com/articles/dealing-with-line-endings/를 보았습니다 .-이 문제에 다시 직면하면 먼저 시도해보십시오.


여기 내가 한 일이 있습니다.

  1. 처음에이 문제가 발생했다는 사실을 깨닫기 전에 합병을했는데 중단해야했습니다. git reset --hard HEAD( 병합 충돌이 발생했습니다. 어떻게 합병을 중단 할 수 있습니까? )

  2. 문제의 파일을 VIM에서 열고 Unix ( :set ff=unix)로 변경했습니다 . dos2unix물론 같은 도구를 사용할 수 있습니다

  3. 커밋

  4. 에 병합 master(마스터는 DOS-2- 유닉스 변경 사항이 있음)

    git checkout old-code-branch; git merge master

  5. 충돌이 해결되었고 파일은 다시 DOS 였으므로 :set ff=unixVIM 에 있을 때와 같아야했습니다. (참고 https://github.com/itchyny/lightline.vim 을 설치 하여 VIM 상태 표시 줄에 파일 형식이 무엇인지 확인할 수있었습니다)

  6. 커밋. 모든 분류!

2

내가 만난 문제는 Windows가 파일 이름 대문자를 신경 쓰지 않지만 git은 신경 쓰지 않는다는 것입니다. 따라서 git은 파일의 소문자 및 대문자 버전을 저장했지만 하나만 체크 아웃 할 수있었습니다.


2

모든 변경 사항을 커밋 한 다음 커밋을 실행 취소했습니다. 이것은 나를 위해 일했다

git add.

git commit -m "랜덤 커밋"

git reset --hard HEAD ~ 1


2

일반적으로, GIT에서 다음 두 명령 (일 아주 잘 작동합니다 모든 수정 및 새 파일을 지우려면 조심을 ,이 + 당신이 생성 한 폴더를 모든 새 파일을 삭제합니다 & 당신의 상태로 모든 수정 된 파일을 복원합니다 현재 커밋 ) :

$ git clean --force -d
$ git checkout -- .

아마도 더 나은 옵션은 때로는 다음과 같은 선택적 메시지로 "git stash push"를 수행하는 것입니다.

$ git stash push -m "not sure if i will need this later"

이렇게하면 새 파일과 수정 된 파일이 모두 지워지지 만 복원하려는 경우 파일이 모두 보관됩니다. GIT의 숨김은 지점마다 전달되므로 원하는 경우 다른 지점에서 복원 할 수 있습니다.

참고로, 새로 추가 된 파일을 이미 준비하고 제거하려는 경우이 트릭을 수행해야합니다.

$ git reset --hard

위의 모든 내용이 효과가 없다면 얼마 전에 저에게 도움이되었던 내용을 아래에서 읽으십시오.

몇 번 전에이 문제가 발생했습니다. 현재 고용주가 제공하는 Windows 10 컴퓨터에서 개발 중입니다. 오늘이 특정 git 동작은 "개발"분기에서 새 분기를 작성했기 때문에 발생했습니다. 어떤 이유로, "develop"브랜치로 다시 전환 한 후, 임의의 임의의 파일이 지속되어 "git status"에서 "modified"로 표시되었습니다.

또한 그 시점에서 다른 지점을 체크 아웃 할 수 없었기 때문에 "개발"지점에 갇혀있었습니다.

이것이 내가 한 일입니다.

$ git log

오늘 초 "develop"에서 생성 한 새 브랜치가 "HEAD-> develop, origin / develop, origin / HEAD, The-branch-i-created "끝에서 참조되는 첫 번째 "커밋"메시지에 표시 되었습니다. -이전의 ".

실제로 필요하지 않았으므로 삭제했습니다.

$ git branch -d The-branch-i-created-earlier-today

변경된 파일이 계속 표시되므로 다음과 같이했습니다.

$ git stash

이것은 내 문제를 해결했다.

$ git status
On branch develop
Your branch is up to date with 'origin/develop'.

nothing to commit, working tree clean

물론 $ git stash list숨겨져있는 변화를 보여줄 것이며, $ git stash clear숨겨져 있는 것이 거의없고 필요하지 않기 때문에 모든 보관함을 삭제했습니다.

참고 : 나는 누군가가 내 앞에서 여기에서 제안한 것을 시도하지 않았습니다.

$ git rm --cached -r .
$ git reset --hard

이것은 또한 효과가 있었을 수도 있습니다. 다음에이 문제가 발생할 때 시도해 볼 것입니다.


1

리포지토리를 복제하고 보류중인 변경 내용이 즉시 표시되면 리포지토리가 일관성이없는 상태입니다. 파일 * text=auto에서 주석 처리하지 마십시오 .gitattributes. 저장소 소유자는 모든 파일이 LF 줄 끝과 일관되게 저장되기를 원하기 때문에 구체적으로 설명했습니다.

HankCa가 언급 한대로 https://help.github.com/articles/dealing-with-line-endings/ 의 지침을 따르면 문제를 해결할 수 있습니다. 쉬운 버튼 :

git clone git@host:repo-name
git checkout -b normalize-line-endings
git add .
git commit -m "Normalize line endings"
git push
git push -u origin normalize-line-endings

그런 다음 지점을 리포지토리 소유자에게 병합 (또는 풀 요청)합니다.


1

이 페이지의 다른 기능은 없습니다. 이것은 마침내 나를 위해 일했습니다. 추적되지 않거나 커밋 된 파일을 표시하지 않습니다.

git add -A
git reset --hard

1

나에게 문제는 명령을 수행 할 때 Visual Studio가 열렸다는 것입니다.

git checkout <file>

Visual Studio를 닫은 후 명령이 작동하여 마침내 스택에서 내 작업을 적용 할 수있었습니다. 따라서 코드를 변경할 수있는 모든 응용 프로그램 (예 : SourceTree, SmartGit, NotePad, NotePad ++ 및 기타 편집기)을 확인하십시오.


0

우리 회사에서도 비슷한 상황에 직면했습니다. 제안 된 방법 중 어느 것도 우리에게 도움이되지 않았습니다. 연구 결과 문제가 드러났다. 문제는 Git에는 두 개의 파일이 있었고 그 이름은 심볼 레지스터에서만 다릅니다. 유닉스 시스템은 그것들을 두 개의 다른 파일로 보았지만 Windows는 열광했습니다. 이 문제를 해결하기 위해 서버에서 파일 중 하나를 삭제했습니다. 그 후 Windows의 로컬 리포지토리에서 다음 몇 가지 명령을 다른 순서로 도왔습니다.

git reset --hard
git pull origin
git merge

0

.git / config를 편집하여 다음을 추가하여 해결했습니다.

[branch "name_branch"]
    remote = origin
    merge = refs/heads/name_branch

그런 다음 .git / refs / heads / name_branch로 이동하여 마지막 커밋의 ID를 배치합니다.enter code here


0

나는 이것을 이렇게 해결했다.

  1. 원하는 올바른 코드의 내용을 복사하십시오
  2. 디스크에서 문제를 일으키는 파일 (되돌릴 수없는 파일)을 삭제하십시오. 이제 동일한 파일의 두 버전이 모두 삭제 된 것으로 표시됩니다.
  3. 파일 삭제를 커밋합니다.
  4. 동일한 이름으로 파일을 다시 작성하고 1 단계에서 복사 한 올바른 코드에 붙여 넣으십시오.
  5. 새 파일 생성을 커밋합니다.

그것이 나를 위해 일한 것입니다.


0

여기에 제안 된 해결책 중 하나가 작동하지 않아 파일이 실제로 특수 문자에 대한 링크라는 것을 알았습니다.

% ls -l StoreLogo.png
lrwxrwxrwx 1 janus janus 8 Feb 21 10:37 StoreLogo.png -> ''$'\211''PNG'$'\r\n\032\n'

% git status    
Changes not staged for commit:
    modified:   StoreLogo.png

% git rm --cached -r StoreLogo.png
rm 'src/GWallet.Frontend.XF.UWP/Assets/StoreLogo.png'

% git reset StoreLogo.png         
Unstaged changes after reset:
M   src/GWallet.Frontend.XF.UWP/Assets/StoreLogo.png

% git status                      
Changes not staged for commit:
    modified:   StoreLogo.png
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.