프로젝트를 진행하면서 최신 커밋(버전)에 비해 현재 작업 디렉터리가 어떻게 변경되었는지 또는 첫 번째 버전에 비해 세 번째 버전은 어떻게 변경되었는지 등을 확인(비교)하고 싶을 때가 있을 수 있다. 이때 git diff 명령어를 사용하면 된다.
git diff 명령어는 최근 커밋과 현재 작업 디렉터리(현재 작업 내역)의 차이를 출력해 준다. 보통 커밋한 이후로 작업 디렉터리에서 무엇을 변경했는지 확인하기 위해 사용한다.
git diff --cached or git diff --staged 명령어는 최근 커밋과 스테이지에 추가된 항목의 차이를 출력해 준다.
git diff <커밋> <커밋> 명령어는 커밋 간 차이를 출력해 준다. <커밋>에는 비교하려는 커밋의 해시를 입력하면 되며, 짧은 커밋 해시를 입력해도 된다.
여기서 주의해야 할 점이 있는데, 네 번째 커밋은 세 번째 커밋에 비해 문자 D가 추가됐고, 세 번째 커밋은 네 번째 커밋에 비해 문자 D가 없다는 점이다. 즉, 무엇을 기준으로 비교하느냐에 따라 비교의 결과는 달라진다.
따라서 위의 명령어는 git diff <이 커밋을 기준으로> <이 커밋이 달라진 점> 으로 이해하는 것이 좋다.
예를 들어, 세 번째 커밋을 기준으로 네 번째 커밋이 달라진 점을 알고 싶다면 git diff <세 번째 커밋> <네 번째 커밋> 을 입력하면 된다. 세 번째 커밋에 비해 네 번째 커밋은 문자 D가 추가됐으므로 +D가 출력된다. 반대로 git diff <네 번째 커밋> <세 번째 커밋> 을 입력하면 -D가 출력된다.
커밋끼리 비교할 때 좋은 팁이 있다. 커밋을 비교할 때 매번 커밋 해시를 조회하고 붙여넣는 것이 번거롭다면, HEAD를 기준으로 비교해도 된다. HEAD^ 또는 HEAD~1 은 현재 브랜치의 최신 커밋에서 하나 이전 커밋을 가리킨다. HEAD^^ 또는 HEAD~2 는 현재 브랜치의 최신 커밋에서 두 개 이전 커밋을 가리킨다. 즉, HEAD 뒤에 붙는 ^ 의 개수 또는 HEAD~ 뒤에 붙는 숫자는 'HEAD에서 몇 번째 이전을 나타내는지'를 의미한다.
예를 들어, 지금 상황에서 HEAD는 fourth commit을, HEAD^ 또는 HEAD~1은 third commit을 나타낸다. 따라서 세 번째 커밋을 기준으로 네 번째 커밋을 비교하고 싶다면 git diff HEAD^ HEAD or git diff HEAD~1 HEAD 를 입력하면 된다.
git diff <브랜치> <브랜치> 명령어는 두 브랜치의 차이를 출력해 준다.
이 명령어도 git diff <기준이 되는 브랜치> <기준과 비교할 브랜치> 로 이해하는 것이 좋다.