Section 8: Git Diff로 변경사항 비교하기

김남훈·2024년 1월 20일

Git & Github

목록 보기
6/18

Critical

Reading Diffs


박스 친 부분은 비교할 파일들이 있다. 보통 이 파일들은 동일한 파일이다. 박스 친 부분의 ab는 같은 파일이지만 다른 버젼을 의미한다(항상 구버전, 신버전으로 작동되는 것은 아님). 이때 다른 파일이 올 수도 있지만 따로 직접 설정해야한다. 그러나 보통은 같은 파일의 다른 버전(commit, branch ...)이다.


중요하지 않다.


파일 a(---로 표시됌)가 파일 b(+++로 표시됌)로 변경되었음을 나타낸다.


만약에 만 줄짜리 파일에서 한 줄을 변경하면 git diff는 전체 만 줄을 모두 보여주지 않고 변경된 부분과 변경된 부분이 있는 콘텍스트의 앞뒤를 약간 보여준다.


chunk 헤더로 chunk의 시작 부분이고 양쪽에 있는 @@ 기호는 chunk 헤더라고 알려주는 부분이고 그 안에 숫자가 기록되어있다. 앞의 숫자 쌍은 파일 a에, 뒤의 숫자 쌍은 파일 b에 상응한다. 앞에 -는 파일 a를 뒤에 +는 파일 b를 나타낸다.

-3,4 +3,5 가 나타내는 것은 다음과 같다.

이 때 @@ -3,4 +3,5 @@ 보면 옆 부분에 orange 가 있는데, 범위(chunk)에는 포함되지 않는 부분을 보여준다.(git이 컨텍스트와 관련없다고 판단해 chunk에 포함시키지 않았음.)

그리고 chunk 부분을 살펴보자.

여기서 -로 시작한느 것은 파일 a에서 온 변경사항이고, + 기호는 파일 b에서 온 변경사항이다. 검정색으로 쓰여진 yellow, green, blue는 바뀌지 않았다(양쪽 파일에 모두 존재). 그러나 빨간색으로 쓰여진 -purple은 파일 a에는 존재하지만 파일 b에는 존재하지 않고 +indigo+violet은 반대의 경우이다.

Git Diff Basics

git diff는 깃에서의 변경 사항들을 보여주는 명령이다. 예를 들어서, 파일이 여러개 있고 변경사항들을 만들었다고 하면 어디가 변경되었는지 한번에 파악하기가 어렵다. 이때 git diff를 사용하면 다음 커밋을 위해 스테이지에 등록되지 않은 워킹 디렉토리의 변경사항을 모두 나열한다.

git diff는 다음 커밋을 위해 스테이지에 등록되지 않은 워킹 디렉토리의 모든 변경사항을 보여준다.

git diff HEAD은 워킹 디렉토리에 있는 모든 변경사항의 목록들을 나열해 준다(git diff HEAD lists all changes in the working tree since your last commit). 따라서 git add <filename>을 실행했다면, git diff 로는 변경사항을 확인할 수 없지만, git diff HEAD로는 변경사항을 확인할 수 있다. 만약에 파일을 만들었다면, git diff를 실행하면 아무런 것도 보여지지 않는다. 왜냐하면, 파일이 untracked 상태이기 때문이다. 그리고 파일을 add 하면 파일이 tracked 되는 동시에 파일이 stage 에 올라가게 되어 마찬가지로 git diff 를 하면 아무것도 보이지 않는다. 그러나 git diff HEAD를 하게 되면 last commit 이후의 모든 변화(tracked 되는 파일들에 한해서)를 보여주기 때문에, 파일이 추가된 것이 보여지게 된다.

Important

Diffing Branches

git diff branch1 ..branch2 또는 git diff branch1 branch2

여기서 branch1-로 표기가 되고 branch2+로 표기가 된다. 반대로 한다면 반대의 결과가 나온다. 따라서 순서가 중요하다.

Diffing Commits

git diff commit1..commit2 또는 git diff commit1 commit2 이 때 git log를 통해서 commit 해쉬를 알아내서 각각 commit1 commit2 자리에 넣는다. 또는 현재 커밋과 이전 커밋을 비교하고 싶다면 git diff HEAD HEAD~1을 사용하면 된다.

Diffing Specific Files

git diff HEAD [filename] [filename] ...
git diff --staged [filename] [filename] ...
-> 여러개의 파일을 한번에 원하는 것만 볼 수도 있다.

Git diff --staged , Git diff --cached

git diff --stagedgit diff --cached 모두 스테이지에 등록된 변경사항만을 보여준다.

Nice To Have

GUI로 Diff 시각화하기

커밋 하나를 누르는 동시에 shift를 누르고 다른 커밋을 누르면 오른쪽에 두 커밋간의 차이가 보인다. 그리고 아래의 그림의 파일을 누르면 상세내용을 확인할 수 있다.

GUI로 Difference를 보는 것이 훨씬 쉽고 나을 수 있다.
Git Kraken에서 Hunk view는 컨텍스트 덩어리를 보여주고, Inline은 한줄한줄 전체코드를 보여준다.

profile
안녕하세요

0개의 댓글