인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Lucas님의 프로필 이미지

작성한 질문수

Git & GitHub, 원리부터 차근차근 - 근본깃 [완성편]

차이점 구하기 #git diff ★

git diff후 차이 내역을 보는데 저는 내용에 -(마이너스)가 붙어 나옵니다.

해결된 질문

작성

·

104

0

image.png
  • 파일 존재 상태

    • circle (staging area): red, green, blue

    • circle (tracked file) : red, green, blue, white

git diff로 비교해 보면 마지막 줄이 -blue로 붉은 글씨로 표시 되는데, 왜 이러는걸까요?

그리고 아래에 +blue가 초록색으로 표시됩니다. 이미 추가가 되어 있는데 왜 빼고 더하는지 이해가 잘 안됩니다.

 

답변 2

0

geek님의 프로필 이미지
geek
지식공유자

혹시, 파일을 생성하거나 수정하는 에디터(ex. vi, vim, vs code 등등)로 어떤 도구를 사용하셨나요??
그림을 보니, 줄바꿈 기호가 없다고 나와서요!

geek님의 프로필 이미지
geek
지식공유자

추측하는 바로는..
쓰고 계신 에디터가 마지막 줄에 줄바꿈 기호를 넣지 않은거 같아요.

그러니까,
영상속 제가 실습한 내용의 파일은
(\n이 줄바꿈 기호.)
red\n
green\n
blue\n

이지만, lucas님의 파일은
red\n
green\n
blue 인거죠! (blue\n에서 \n이 빠졌습니다!)


이때, git diff는 마지막 줄에 줄바꿈 기호가 없다는 사실도 알려줍니다.
정리하자면, git diff는

1. 스테이징에어리와 워킹디렉토리의 차이점.
2. 파일 마지막 줄의 줄바꿈 유무.

를 보여줍니다.
이점을 기억하고, lucas님의 워킹디렉토리와 스테이징 에어리어를 따져봅시다.

[워킹디렉토리]
red\n
green\n
blue\n
white


[스테이징 에어리어]
red\n
green\n
blue

이 상황에서 git diff 를 통해,
diff가 구해지는 과정을 자세히 살펴봅시다.

첫째, 스테이징 에어리어의 blue에는 \n이 없고.
워킹 디렉토리의 blue에는 \n기호가 있어요.
다시 말해, 워킹 디렉토리는 blue\n 라고 적혀있고,
스테이징 에어리어는 blue라고 적혀있다는 내용이에요. 이 둘은 엄연히 다릅니다.
그래서 일단은
-blue 라고 뜨게 될거에요.
이때, 스테이징 에어리어엔 줄바꿈 기호가 없으니.
그다음엔 \no newline end of file 이라고 뜨게 될테고.
마지막으로 워킹 디렉토리에 blue\n가 적혀있으니
diff엔 +blue라고 나오게 될겁니다.

종합하자면,
-blue
\no newline end of file
+blue
가 되는것이지요.


둘째, 스테이징 에어리어의 마지막 줄엔 white가 없는데,
워킹디렉토리 파일의 마지막 줄엔 white가 있어요.
그래서, diff엔 +white라고 뜨게 될테고.
이어서, 워킹디렉토리 파일의 마지막줄엔 줄바꿈 기호가 없으니,
\no newline end of file 이라고 뜨게 될겁니다.
정리하자면,

+white
\no newline end of file이 되는거에요.

첫 째와 둘째 모두를 종합하자면,

-blue
\no newline end of file
+blue
+white
\no newline end of file 이 되므로,
보여주신 그림과 일치합니다.

또 궁금하신 점 있으면, 언제든 질문해주세요!

Lucas님의 프로필 이미지
Lucas
질문자

아 줄바꿈 때문이었군요. 너무 이해가 바로 되었습니다. 감사합니다!

vs code 사용 중에 있습니다.

geek님의 프로필 이미지
geek
지식공유자

그렇군요!
vs code에서 줄 바꿈 문제를 해결하시면,
실습 영상의 것과 똑같은 diff를 보실 수 있을거에요.

추가적으로 궁금하신 내용이 있다면, 언제든 질문주세요!

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. Lucas님께서 문의하신 git diff 결과에 대한 질문에 대한 답변을 제공해드리겠습니다.

git diff를 실행하면 버전을 비교하면서 각 줄의 변화 내역을 보여줍니다. 여기서 - 기호는 해당 줄이 이전 버전으로부터 제거되었음을 나타내고, + 기호는 새로 추가된 줄을 의미합니다. 본인이 제공해주신 내용에 따르면:

  • 이전 버전(트래킹된 파일)에서 “blue”는 존재했으나, 변경 작업을 통해 스테이징 영역에 새로운 버전에서는 “blue”가 제거된 것이 아님을 의미합니다.
  • 두 번째 +blue는 새 버전에서 “white” 다음에 “blue”가 추가된 것을 나타냅니다. 사실은 위치 변경만 있었고, 로직상으로는 제거하고 추가된 것처럼 표시되는 것입니다.

이러한 diff 표시 방식은 파일 내에서의 변화(추가나 삭제, 수정)를 상세하게 나타내기 위한 것이므로, 실제 상관성을 쉽게 파악할 수 있도록 도와줍니다.

추가로 참고하실 수 있는 유사 질문이 있습니다:
- git diff의 -와 + 표시에 대한 이해

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Lucas님의 프로필 이미지

작성한 질문수

질문하기