2012-10-09 6 views
4

마지막 커밋 이후와 똑같은 깨끗한 작업 디렉토리로 돌아가고 싶습니다. 힘내는 내가하지 않은 파일 수정을 내게보고하고있다. 그래서 나는 그것이 라인 엔딩과 관련이 있다고 생각한다. 나는이 작업을 수행하는 모든 일반적인 용의자를 시도수정 된 파일을 실행 취소 할 수 없습니다.

:

git reset --hard git commit -- . git stash git clean -fd

는 상관없이 내가 뭘, git status은 항상 수정 된 같은 파일을 보여줍니다. 내가 무엇을 할 수 있을지? 커밋되지 않은 변경 사항이 다른 브랜치에 숨겨져 있으므로 모든 것을 제거하고 싶지는 않지만 마스터 브랜치를 "롤백"합니다. 내가 찾을 수
$ git status 
# On branch master 
# 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: demo/index.html 
# modified: demo/js/app.js 
# modified: demo/js/libs/jquery.1.7.1.js 
# modified: demo/js/libs/matchMedia.js 
# modified: demo/js/libs/modernizr.js 
# modified: demo/js/loadr.js 
# modified: dist/enquire.js 
# modified: src/include/intro.js 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

그럼 내가 제안 무엇을하려고 출력 및 다른 모든 것들 :

편집 롤백에도 불구하고

WickyNilliams at Nick MBA in ~/Repositories/enquire on master* 
$ git checkout -- . 
WickyNilliams at Nick MBA in ~/Repositories/enquire on master* 
$ git reset --hard 
HEAD is now at d70fee4 added meta tag to test demo on mobile #10 
WickyNilliams at Nick MBA in ~/Repositories/enquire on master* 
$ git status 
# On branch master 
# 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: demo/index.html 
# modified: demo/js/app.js 
# modified: demo/js/libs/jquery.1.7.1.js 
# modified: demo/js/libs/matchMedia.js 
# modified: demo/js/libs/modernizr.js 
# modified: demo/js/loadr.js 
# modified: dist/enquire.js 
# modified: src/include/intro.js 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

당신이 볼 수 있듯이, 변경하지.

그렇다면 나는 충고를 따랐고 모든 공간을 무시하고 diff를 실행했는데 공백을 무시할 때 아무런 차이가 없다고 생각되는 것처럼 보인다. 그래서 나는 라인 엔딩이라고 생각한다! 이 문제를 해결하려면 어떻게해야합니까? 나는 autocrlf ~ true으로 설정했습니다.

+0

'git diff'에 수정 내용을 알려주시겠습니까? –

+0

예. 나는 그것을 끝냈습니다. 기본적으로 모든 줄이 바뀌 었습니다. 그래서 나는 줄 끝과 관련이 있다고 생각했습니다.이상한 일이지만 한 대의 컴퓨터에서 모든 작업이 하나의 컴퓨터에서 이루어 지므로 어떻게 될지 확실하지 않습니다 – WickyNilliams

+0

재설정 후 텍스트 편집기에서 파일을 열기 전에 * 이런 일이 있습니까? 나는 한 달 전에 설정했던 미친 환경 설정으로 인해 내 IDE가 내 도움없이 "유용하게"라인 엔딩을 변경했다는 것을 발견했다. –

답변

4

파일을 마지막 커밋 이후의 방식으로 다시 변경하려면 git checkout [file]을 사용하여 특정 파일을 가져옵니다. 그러나 git reset --hard은 전체 트리에이를 수행해야합니다. 줄 바꿈이라고 생각하면 git diff을 입력 한 다음 git diff --ignore-all-space을 입력하십시오. 첫 번째 diff가 변경 사항을 표시하고 두 번째 diff가 변경 사항을 표시하지 않는 경우 적어도 회선 종료 문제가 있다는 것을 알고 있습니다.이 경우 git and line endings에 대한 설명을보고 싶을 수 있습니다.

+0

감사합니다. 공백을 무시하면 파일에 diff가 표시되지 않으므로 라인 끝이어야합니다. github 기사를 따를 것입니다. 특별히 줄 바꿈을 수정하기위한 커밋을 피하기를 바랬지 만해야 할 것 같아요. – WickyNilliams

2

접근을 시도 확실히 당신의 EOL 설정이 망할 놈의 파일을 수정하는 생각한다면

+2

참으로'git rm --cached -r .' 전에'git reset --hard'는 나를 위해 일했습니다. – Karussell

0

(당신의 OS 및 환매 특약 정책) 합리적인 값을 만드는 후 this github article의 "재 정상화 REPO을"절에서 설명 (git diff에 차이점이 있지만 git diff --ignore-all-space이 아닌 경우 true가 될 수 있습니다.) 가장 좋은 해결책은 프로젝트의 줄 끝 수정을 해제하는 것입니다. 팀 전체가 주어진 파일 세트에 대해 동일한 플랫폼 (Windows, Linux 등)을 사용하는 경우에 효과적입니다.

프로젝트의 줄 끝 수정을 끄려면 리포지토리의 루트에서 .gitattributes을 열거 나 작성하십시오. 파일이 존재하고 *에 대해 다른 설정이있는 경우, * text=auto로,

* -text 

등을 위의 라인으로 교체 : 파일이 줄이 포함되어 있는지 확인하십시오.