[Git & GitHub 5] git diff
0. git diff란?
git diff는 깃에서의 변경 사항들을 보여주는 명령어입니다.
(워킹 디렉토리 간, 스테이지 영역과 워킹 디렉토리, 브랜치 간 등)
git repository에 영향을 주지 않는 명령어로, 순수하게 정보를 주는 명령어입니다.
단, 새로 생성된 파일은 git에 등록하기 전까지 추적하지 않습니다,
(새 파일은 git add, 또는 git commit으로 git에 등록해야 합니다)
1. git diif
스테이징되지 않은 변경사항 보기
아무런 옵션 없이 git diff 명령어를 실행하면,
(스테이지 영역에 등록되지 않은) 워킹 디렉토리의 변경사항을 모두 나열합니다.
각 줄은 비교할 파일, 파일 식별자, 변경 파일, 변경 위치(line), 변경 내용을 나타냅니다.
git add 하지 않은 내용을 표시합니다.
아래는 그 예시입니다.
a파일의 0번째 라인부터 총 0개의 라인을
b파일의 1라인으로 변경합니다.
@@ -3,4 +3,5 @@
a파일의 3번째 라인부터 총 4개의 라인을
b파일의 3번째 라인부터 총 5개의 라인으로 변경
변경내용 앞뒤 내용을 약간 포함합니다.
아래는 다른 예시입니다.
2. git diff HEAD
작업 디렉토리 변경사항 보기
git diff HEAD는 가장 최근에 실행된 커밋과 워킹 디렉토리에 있는 변경사항을 나열합니다.
branch HEAD에 git commit 하지 않은 내용을 표시합니다.
3. git diff --staged, git diff --cached
스테이징된 변경사항 보기
두 옵션 모두 스테이지에 등록된 변경사항을 보여줍니다.
4. git diff 파일명(경로 포함)
특정 파일 변경사항 보기
git diff 명령어의 매개변수에 파일명을 넣으면,
많은 변경사항이 있어도 파일을 특정하여 변경사항을 확인할 수 있습니다.
git diff resources/application.yml
매개변수에 여러 개의 파일을 입력할 수 있습니다.
(공백으로 구분합니다)
git diff resources/application.yml resources/template/index.html
필요에 따라 옵션을 추가합니다.
(HEAD, --cached)
git diff HEAD resources/application.yml
5.
git diff branch1..branch2
git diff branch1 branch2
브랜치 변경사항 비교하기
git diff branch1..branch2 또는 git diff branch1 branch2 명령어를 통해 브랜치를 비교할 수 있습니다.
매개변수에 먼저 입력한 branch1이 ---a가 되고 후에 입력한 branch2가 +++b가 됩니다.
6.
git diff commit1..commit2
git diff commit1 commit2
커밋 변경사항 비교하기
git diff commit1..commit2 또는 git diff commit1 commit2 명령어를 통해 브랜치를 비교할 수 있습니다.
매개변수에 먼저 입력한 commit1이 ---a가 되고 후에 입력한 commit2가 +++b가 됩니다.
이때 commit의 매개변수로는 커밋의 해시를 입력합니다.
(커밋의 해시는 git log --oneline 명령어를 통해 쉽게 확인할 수 있습니다)
git commit HEAD HEAD~n
HEAD와 HEAD를 n번 거슬러 올라간 커밋 간 변경사항을 비교합니다.
만약 n이 1이면, HEAD와 HEAD 직전의 커밋 간 변경사항을 비교합니다.
필요에 따라 매개변수에 파일명을 명시하여 브랜치 간 특정 파일의 변경사항을 확인할 수도 있습니다.