git diff는 여러 방면에 정말 자주 쓰이는 것 만큼 할 수 있는 것이 많다보니 쉽게 잊어 버려 매번 검색하곤 했다. 따라서 자주 쓰이는 용법을 한 번 정리해 보았다.
git pull 하기 전에 리모트와의 변경점 확인하기
git diff HEAD.. 리모트명/브랜치명
git pull하기 전에 로컬의 최신 커밋과 pull할 곳의 리모트 리포지토리와의 변경점을 보고 싶을 때는 이 커맨드로 확인할 수 있다. 여기서의 리모트 명은 origin과 같은 것을 의미한다.
git push 하기 전에 리모트와의 변경점 확인하기
위의 커맨드와 반대로 아래와 같이도 작성할 수 있다.
git diff 리모트명/브랜치명..HEAD
..의 오른쪽이 시계열적으로 최신으로 간주되므로, 이 경우는 git commit 한 후에 리모트 리포지토리와 그로부터 push하고 싶은 곳을 표시하고 싶은 경우 사용한다.
git add하기 전에 변경점 확인하기
git diff
git add하기 전에 변경한 곳과 인덱스와의 변경점을 보고 싶을 때에 이 커맨드를 사용한다.
git add한 후에 변경점 확인하기
git diff --cached
git add한 후에 인덱스와 가장 최근의 커밋와의 변경점을 보고 싶을 때는 --cached를 붙인다.
--staged도 같은 의미로 직감적으로 쉽게 알 수 있는 명명이기 때문에 이것을 사용하는 쪽이 더 알기 쉬울지도 모른다.
이번에 커밋한 변경점 확인
git diff HEAD^
git commit 한 후에 커밋한 곳을 표시하고 싶은 경우 이 커맨드로 볼 수 있다. '가장 최근의 커밋'과 '한 단계 전의 커밋'과의 차이의 정도 라고 한다(일본에서는 差分이라고 표현하는 것 같다) .
본래 git diff HEAD^..HEAD 라고 작성하는 것이 올바르지만, ..의 오른쪽을 생략하면 암시적으로 현재의 브랜치의 HEAD를 지정하는 것이 되므로 이와 같은 작성법도 문제가 없다.
cherry-pick했을 때에 어떤 파일이 변경되었는가를 조사하고 싶을 때도 이 커맨드로 확인할 수 있다.
커밋끼리 비교하기
git diff 변경전의SHA..변경후의SHA
SHA만 알면, 그 커밋 끼리의 변경점도 확인할 수 있다. SHA란 GitHub의 커밋 목록에 표시되어 있는 아래의 빨간 네모 박스이다.
어떤 커밋의 변경점 확인하기
git diff 확인하고싶은커밋의SHA^..확인하고싶은커밋의SHA
확인하고 싶은 커밋의 SHA만 알면 "^"를 사용하여 그 커밋으로 변경된 파일도 확인할 수 있다.
브랜치끼리 비교하기
git diff 브랜치A..브랜치B
Pull Request를 보내기 전에 자신이 만든 브랜치와 마스터와의 변경점을 확인하는 등에 사용된다.
어떤 1개의 파일의 변경점 확인하기
git diff --대상파일경로
git add하기 전에 변경된 어떠한 파일에 대해 변경점을 확인하고 싶을 때 사용한다. "경로"이기 때문에 당연히 디렉토리 단위에 비교할 수도 있다.
참고로 git이 인수를 파일로 인지한 경우에는 --를 생략할 수 있다. 특정 파일을 다른 브랜치와 비교하고 싶은 경우에는 아래와 같이 작성할 수 있다.
git diff 브랜치A..브랜치B --대상파일경로
다른 파일 끼리 비교하기
git diff -- 파일경로A 파일경로B
--의 뒤는 항상 경로로 인식된다. 그러므로 2개를 나란히 작성하면 경로 끼리 비교하는 것이 가능하다.
어느정도 변경되었는지만 확인하기
git diff --stat
변경점을 모두 표시하는 것이 아닌, 파일마다 얼마나 변경되었는가를 표시하고 싶은 경우에 이 옵션을 사용한다. 이 옵션을 사용하면 아래와 같이 화면에 표시된다.
변경한 파일이 많아 이상한 파일이 포함되어 있는지를 한 번에 확인하고 싶을 때 유용하다.
파일명만 확인하기
git diff --name--only
변경점을 표시할 때에, 변경된 파일의 경로만을 표시해준다.
(이미지 추후 첨부)
이 자체로 사용하는 것보다 cp등 외부 커맨드와 같이 사용해 변경 파일에 대해 일괄 처리하는 경우가 많다.
git add -n .; git diff --name-only
위와 같이 작성하면, 일단 git add의 dry-run한 다음 추가된 파일명도 포함해준다. git status와 다르게 파일 명만 출력 되므로 다양한 응용이 가능한 커맨드이다.
개행 코드나 공백을 무시하기
git diff -w
개행 코드의 차이점이나 문장의 서두나 끝의 공백을 무시하고 싶은 경우에 -w를 붙인다. -b도 있지만, -w만 기억해두어도 큰 문제는 없다.
개행 무시하기
git diff --ignore-blank-lines
--ignore-blank-lines 옵션을 붙이면 개행이 증가하여도 무시해준다.
변경점의 전후에 표시되는 행 수 변경하기
git diff -U0
이렇게 작성하면 전후의 행수에 삭제된다. 반대로 -U10 등을 하면 전후에 10행이 표시된다.
단어 단위로 비교하기
git diff --color-words
메소드명을 변경했을 때 등, 행 단위가 아닌 단어 단위로 비교하고 싶은 경우 --color-words 옵션을 붙이면 확인하기 쉬워진다.
.gitattributes와 함께 사용하면 단어 단위로 비교해주고 보다 더 알기 쉽게 보여주기 때문에 추천한다.
참고자료
'IT > 기초 지식' 카테고리의 다른 글
[Linux] 프로세스가 열려 있는 파일을 찾을 때 사용하는 lsof 명령어 (0) | 2020.10.20 |
---|---|
[UML] 시퀀스 다이어그램(Sequence Diagram) 기초 정복 (0) | 2020.10.13 |
[Linux] Linux의 기초와 명령어 정리 (0) | 2020.05.06 |
[네트워크] VPN 개념과 Windows10에서의 설정 방법 (0) | 2020.05.06 |
[IT 용어] PoC(Proof of Concept)란 (0) | 2020.04.22 |