본문 바로가기
Q&A해결2026년 8월 8일1분 읽기

윈도우에서 파일 한 줄만 고쳤는데 git diff에 전체 파일이 바뀐 걸로 나옵니다

c
crlf_taeyang
조회 564댓글 1

맥 쓰는 동료랑 같이 작업하는 레포인데, 제가 윈도우에서 특정 파일을 한 줄만 수정하고 git diff 를 보면 파일 전체가 통째로 삭제됐다 다시 추가된 것처럼 나옵니다. 실제로는 딱 한 줄만 건드렸는데요.

git diff에 전부 빨간색으로 삭제, 전부 초록색으로 추가로 뜨고, 커밋하면 PR에서 리뷰가 불가능할 정도로 diff가 지저분해집니다. 눈으로 보면 내용은 똑같은데 뭔가 보이지 않는 차이가 있는 것 같아요.

$ git diff --stat
 src/utils.js | 240 ++++++++++++++++++------------------
 1 file changed, 120 insertions(+), 120 deletions(-)

딱 한 줄 고쳤는데 120줄이 바뀐 걸로 잡힙니다. core.autocrlf 설정이랑 관련 있다는 얘긴 봤는데 정확히 뭘 어떻게 맞춰야 하는지 모르겠습니다.

댓글 1

김김영삼2개월 전
줄바꿈 문자(line ending) 차이입니다. 맥과 리눅스는 LF, 윈도우는 CRLF를 쓰는데, 동료가 LF로 만든 파일을 님 에디터나 git 설정이 CRLF로 바꿔 저장하면 눈에 안 보이는 캐리지리턴이 모든 줄 끝에 붙습니다. 그래서 내용은 같아 보여도 git 입장에선 모든 줄이 바뀐 거라 파일 전체가 diff로 잡히는 거예요.

확인은 간단해요. git diff -w 로 공백/줄바꿈 무시하고 봤을 때 diff가 거의 안 나오면 십중팔구 줄바꿈 문제입니다. 또는 git ls-files --eol src/utils.js 하면 그 파일이 index/워킹트리에서 crlf인지 lf인지 값이 바로 나옵니다.

제대로 된 해결은 각자 core.autocrlf를 손대는 것보다 레포에 .gitattributes를 두는 겁니다. 개인 설정은 사람마다 달라서 또 틀어지거든요. 레포 루트에 이 한 줄을 넣으세요.

* text=auto eol=lf

이러면 git 안에 저장되는 모든 텍스트가 LF로 통일되고 팀원 OS가 뭐든 동일하게 동작합니다. 윈도우 배치파일처럼 CRLF가 꼭 필요한 건 *.bat text eol=crlf 로 예외 두시고요.

.gitattributes를 추가한 뒤엔 이미 인덱스에 CRLF로 박힌 파일들을 한 번 정규화해야 합니다. git add --renormalize . 하고 커밋하면 줄바꿈만 바뀐 커밋이 한 번 생기는데, 그 다음부터 diff가 깨끗해집니다. 이 정규화 커밋은 다른 변경 없이 단독으로 올려서 리뷰어가 '아 줄바꿈 정리구나' 하고 넘어가게 하세요.
Ctrl+Enter로 등록